![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
laoxilaoxi_
码农,邮箱laoxilaoxi@foxmail.com
展开
-
《Redis设计与实现》4.独立功能的实现
一、发布与订阅 通过PUBLISH发布、SUBSCRIBE订阅、PSUBSCRIBE模式订阅组成。 1.频道订阅与退订 虚线为新增订阅,如果channel已经存在,则直接添加到对应链表尾端,如果不存在,则现在pubsub_channels中添加新channel,然后添加节点。 与订阅相反,退订时如果去掉该客户端节点后,channel没有其他订阅者,则将该channel从pubsub_channels中删除。 ...原创 2020-05-21 16:42:39 · 245 阅读 · 0 评论 -
《Redis设计与实现》3.多机数据库的实现
一、复制SLAVEOF 旧版本复制功能:sync同步、command propagate命令传播 同步:当客户端像从服务器发送SLAVEOF 从服务器向主服务器发送SYNC命令 主服务器收到SYNC命令,执行BGSAVE,并使用一个缓冲区缓存从现在开始的命令 BGSAVE完成,将文件发送给从服务器 主服务器将缓冲区的命令发送到从服务器执行 命令传播 主服务器将执行的写命令发送原创 2020-05-21 16:40:46 · 172 阅读 · 0 评论 -
《Redis设计与实现》2.单机数据库的实现
一、数据库 redis的key过期时间设置:EXPIRE设置ttl秒,PEXPIRE设置ttl毫秒,EXPIREAT设置过期时间戳秒,PEXPIREAT设置过期时间戳毫秒。 保存过期时间:redis过期时间存放于expires字典中,其中都是转为PEXPIREAT命令存储的。 删除过期时间:PERSIST key 过期键删除策略:redis采用惰性删除+定期删除 定时删除:设置过期时间的同时,创建定时器,定时器在键过期时立即执行删除操作(内存友好,但CPU不友好原创 2020-05-21 16:33:28 · 162 阅读 · 0 评论 -
《Redis设计与实现》1.数据结构域对象
一、SDS:simple dynamic string int len:已使用的buf长度 int free:未使用的长度 char buf[]:存储字符串 二、链表:双向链表,包含head、tail指针,head的prev为null,tail节点的next为null 三、字典:类似于java hashmap,rehash过程是渐进式的,内部维护一个是否正在rehash的标识,维护一个rehash 四、跳跃表: header头结点 tail尾结点原创 2020-05-21 16:27:49 · 175 阅读 · 0 评论