Loading

合集-Redis

摘要:redis为什么这么快 基于内存实现 redis将数据存储在内存中,内存的读写速度很快,所以redis速度很快 高效的数据结构 哈希表 跳表 压缩表 快表 双向链表 简单动态字符串 整数数组 单线程模型 使用IO多路复用 合理的数据编码 Redis为什么会比MySQL快? 1.(内存和磁盘的区别)R 阅读全文
posted @ 2024-07-22 19:40 Duancf 阅读(18) 评论(0) 推荐(0)
摘要:数据类型和底层结构的对应 数据的存储模型 string list hash set Zset 阅读全文
posted @ 2024-07-13 19:34 Duancf 阅读(15) 评论(0) 推荐(0)
摘要:SDS Redis 中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在的。我们知道 C 语言里面的字符串标准形式是以 NULL(即 0x\0)作为结束符,但是在Redis 里面,字符串不是这么表示的。因为要获取以 NULL 结尾的字符串的长度使用的是 strlen 标准库函数,这个函数的 阅读全文
posted @ 2024-07-13 15:43 Duancf 阅读(35) 评论(0) 推荐(0)
摘要:字典是 Redis 服务器中出现最为频繁的复合型数据结构,除了 hash 结构的数据会用到字典(dict)外,整个Redis 数据库的所有 key 和 value 也组成了一个全局字典还有带过期时间的 key 集合也是一个字典。zset 集合中存储 value 和 score 值的映射关系也是通过字 阅读全文
posted @ 2024-07-18 19:29 Duancf 阅读(112) 评论(0) 推荐(0)
摘要:quicklist Redis早期版本存储list列表数据结构使用的是压缩列表ziplist 和普通的双向链表linkedlist,也就是说当元素少时用ziplist,当元素多时用linkedlist。 //链表的节点 struct listNode<T>{ listNode* prev; list 阅读全文
posted @ 2024-07-13 19:33 Duancf 阅读(46) 评论(0) 推荐(0)
摘要:[Redis]跳跃列表详解 阅读全文
posted @ 2024-07-13 19:33 Duancf 阅读(14) 评论(0) 推荐(0)
摘要:Redis 为了节约内存空间使用,zset 和 hash 容器对象在元素个数较少的时候,采用压缩列表(ziplist)进行存储。压缩列表是一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空隙。 >zadd programmings 1.0 go 2.0 python 3.0 java (inte 阅读全文
posted @ 2024-07-13 18:36 Duancf 阅读(114) 评论(0) 推荐(0)
摘要:Redis 5.0 版本又引入了一个新的数据结构 listpack,它是对 ziplist 结构的改进版,在存储空间上会更加节省,而且结构上也比 ziplist 更精简。listpack 的整体形式和 ziplist还是比较接近的,如果你认真阅读了 ziplist 的内部结构分析,那么对于 1ist 阅读全文
posted @ 2024-07-13 19:33 Duancf 阅读(83) 评论(0) 推荐(0)
摘要:intset 小整数集合 set 集合容纳的元素都是整数并且元素个数较少时, Redis 会使用 intset 来存储集合元素。 intset 是紧凑的数组结构,同时支持 16 位、 32 位和 64 位整数 struct intset<T> { int32 encoding;//决定整数位宽是 1 阅读全文
posted @ 2024-08-30 22:59 Duancf 阅读(23) 评论(0) 推荐(0)
摘要:redis在项目中的主要作用 缓存,速度比较快 计数器,incr decr 消息队列,消息的订阅和发布机制 排行榜,zset 分布式锁,set 数据结构 String(emdstr,raw) List(quicklist) HashMap(hashtable ziplist) Set(intset 阅读全文
posted @ 2024-07-04 16:38 Duancf 阅读(15) 评论(0) 推荐(0)
摘要:ZSet底层有两种实现,一种是ZipList,另一种是SkipList+HashTable 阅读全文
posted @ 2024-07-06 21:37 Duancf 阅读(35) 评论(0) 推荐(0)
摘要:一致性哈希解决了分布式系统在服务器节点动态伸缩时的数据迁移问题 一致性哈希算法(Consistent Hashing)最早在论文《Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot 阅读全文
posted @ 2024-07-07 23:40 Duancf 阅读(54) 评论(0) 推荐(0)
摘要:![image](https://img2024.cnblogs.com/blog/1533409/202407/1533409-20240707113630086-24985723.png) ![image](https://img2024.cnblogs.com/blog/1533409/202407/1533409-20240707113710413-109745896.png) 阅读全文
posted @ 2024-07-07 11:37 Duancf 阅读(7) 评论(0) 推荐(0)
摘要:过期删除 Redis 提供了四个命令来设置过期时间(生存时间): EXPIRE :表示将键 key 的生存时间设置为 ttl 秒; PEXPIRE :表示将键 key 的生存时间设置为 ttl 毫秒; EXPIREAT :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳; 阅读全文
posted @ 2024-07-22 11:52 Duancf 阅读(83) 评论(0) 推荐(0)
摘要:如果在 Redis 中没有过期这个概念,这就意味着我们所有写入的键只要不主动删除就会一直保存在 Redis 中,而 Redis 又是一个基于内存的数据库,内存空间是非常有限的。 过期操作 过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 阅读全文
posted @ 2024-09-21 13:50 Duancf 阅读(139) 评论(0) 推荐(0)
摘要:持久化 Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。 Redis的持久化机制有两种,第一种是快照,第二种是AOF日志(Append only file)。 快照是一次全量备份,AOF日志 阅读全文
posted @ 2024-07-06 23:32 Duancf 阅读(31) 评论(0) 推荐(0)
摘要:字典扩容 Java 中的 HashMap 有扩容的概念,当 LoadFactor 达到阈值时,需要重新分配一个新的 2 倍大小的数组,然后将所有的元素全部 rehash 挂到新的数组下面。 rehash就是将元素的 hash 值对数组长度进行取模运算,因为长度变了,所以每个元素挂接的槽位可能也发生了 阅读全文
posted @ 2024-07-06 22:51 Duancf 阅读(109) 评论(0) 推荐(0)
摘要:数据库和缓存如何保证一致性? 阿旺登陆到了服务器,经过一番排查后,确认服务器的性能瓶颈是在数据库。 这好办,给服务器加上 Redis,让其作为数据库的缓存。 这样,在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。 先更新数据库,还 阅读全文
posted @ 2024-07-18 18:43 Duancf 阅读(46) 评论(0) 推荐(0)
摘要:(请注意redis在rdb持久化(bgsave)和重写aof(bgrewriteaof)的时候创建子线程) Redis 是个单线程程序!这点必须铭记。也许你会怀疑高并发的 Redis 中间件怎么可能是单线程。很抱歉,它就是单线程,你的怀疑暴露了你基础知识的不足。莫要瞧不起单线程,除了Redis 之外 阅读全文
posted @ 2024-07-13 15:43 Duancf 阅读(17) 评论(0) 推荐(0)
摘要:为什么需要分布式锁 现在大多数的项目都是由分布式架构所搭建起来的,常常会采用集群以及部署在多台服务器上等方式运行,想必现在nginx的反向代理、负载均衡已经无人不知无人不晓了吧。由于通过用户不同的电脑已经不同的浏览器进行访问项目,就会由nginx转发给集群中的项目实例,此时常用的锁由于跨服务器的原因 阅读全文
posted @ 2024-07-13 18:36 Duancf 阅读(39) 评论(0) 推荐(0)
摘要:李代桃僵--Sentinel 目前我们还只是讲 Redis 的主从最终一致性。大家可曾思考过,如果主节点凌晨3 点突发宕机怎么办?只能坐等运维人员从床上爬起来,然后手工进行主从切换,再通知所有的程序把地址统统改一遍重新上线吗?毫无疑问,这样的人工运维效率太低,事故发生后估计至少要花费1个小时才能缓过 阅读全文
posted @ 2024-07-20 21:15 Duancf 阅读(45) 评论(0) 推荐(0)
摘要:redis中的大key和unlink操作 Redis中的BigKey通常指的是那些包含大量元素的复合数据类型,如一个列表包含数百万个元素,或一个字符串的大小超过512MB。这些BigKey会在执行操作时消耗大量的CPU和内存资源,影响Redis的响应时间。 BigKey的产生原因 不合理的数据设计 阅读全文
posted @ 2024-08-06 20:30 Duancf 阅读(122) 评论(0) 推荐(0)
摘要:Redis 的持久化方式有两种:AOF 日志和 RDB 快照。所以接下来,针对这两种持久化方式具体分析分析。 大 Key 对 AOF 日志的影响 先说说 AOF 日志三种写回磁盘的策略 Redis 提供了 3 种 AOF 日志写回硬盘的策略,分别是: Always,这个单词的意思是「总是」,所以它的 阅读全文
posted @ 2024-07-22 19:48 Duancf 阅读(43) 评论(0) 推荐(0)
摘要:事务 为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis也不例外。 Redis的事务使用方法非常简单 不同于关系数据库我们无须理解那么多复杂的事务模型就可以直接使用。不过也正是因为这种简单性它的事务模型很不严格这要求我们不能像使用关系数据库的事务一样来使用 Redis 事务 阅读全文
posted @ 2024-07-28 18:55 Duancf 阅读(261) 评论(0) 推荐(0)
摘要:缓存穿透 用户访问一些不存在的数据,redis没有,于是去mysql查询也没有,这样就发生了两次无效的查询。 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,缓存永远不会生效。这样,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 阅读全文
posted @ 2024-08-17 22:59 Duancf 阅读(14) 评论(0) 推荐(0)
摘要:这次聊聊,Redis 的哨兵机制。 为什么要有哨兵机制? 在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave)进行数据同步了。 这时如果要恢复服务的话,需要人工介入,选择一个「从节点」切换 阅读全文
posted @ 2024-07-30 19:31 Duancf 阅读(96) 评论(0) 推荐(0)
摘要:有备无患--主从同步 很多企业都没有使用 Redis 的集群,但是至少都做了主从。有了主从,当主节点(Master)挂掉的时候,运维让从节点(Slave)过来接管,服务就可以继续,否则主节点需要经过数据恢复和重启的过程,这就可能会拖延很长的时间,从而影响线上业务的持续服务。在了解 Redis 的主从 阅读全文
posted @ 2024-08-06 14:42 Duancf 阅读(75) 评论(0) 推荐(0)
摘要:延迟消息队列 redis数据结构,用什么结构实现延迟消息队列 延迟消息队列是一种消息队列系统,它允许消息的发布者在消息发送时指定消息的投递时间,使消息在未来的某个预定时间点被消费者接收。这种机制对于需要在稍后执行的任务或具有特定延迟需求的应用非常有用。 对于实现延迟消息队列,可以使用有序集合(Sor 阅读全文
posted @ 2024-08-17 22:59 Duancf 阅读(69) 评论(0) 推荐(0)
摘要:Redis如何实现消息队列 1、使用List List最为简单和直接,主要通过lpush、rpop存储和读取消息队列的(先进先出) ruby 代码解读复制代码127.0.0.1:6379> lpush mq "firstMsg" #推送消息 firstMsg (integer) 1 127.0.0. 阅读全文
posted @ 2024-08-23 21:59 Duancf 阅读(32) 评论(0) 推荐(0)
摘要:概述 Redis到底是多线程还是单线程程序要看是针对哪个功能而言,对于核心业务功能部分(命令操作处理数据),Redis是单线程的,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程,所以一般我们认为Redis是个单线程程序。但是从 阅读全文
posted @ 2024-09-07 21:53 Duancf 阅读(665) 评论(0) 推荐(0)
摘要:redis事务的ACID性质讨论 A原子性 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的 如果一个事务队列中的所有命令都被成功地执行,那么称这个事务执行成功 另一方面,如果 Redis 服务器进程在执行事务的 阅读全文
posted @ 2024-09-07 22:59 Duancf 阅读(64) 评论(0) 推荐(0)
摘要:waitTime 等待时间。客户端尝试获取锁时最大等待时间,超过这个等待时间必然返回获取锁失败。 leaseTime 锁的租期。客户端可持有锁的时间,超过这个时间锁自动过期。 基本流程 竞争锁的客户端执行Lua脚本获取锁,如果获取失败,则订阅解锁消息,并挂起线程。 持有锁的客户端执行Lua脚本解锁, 阅读全文
posted @ 2024-09-26 13:48 Duancf 阅读(47) 评论(0) 推荐(0)