![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 84
幻想波普星
这个作者很懒,什么都没留下…
展开
-
讲讲redis底层数据结构吧
redis有五种对象类型,分别是字符串、列表、哈希、集合、有序集合,redis的键值对是两个对象,键一般是字符串,值就这五种中选了。 字符串 字符串的编码可以了解下SDS,全称Simple Dynamic String 和C语言中的字面量String相比,SDS优势主要以下几点 提供了len属性,O(1)获取长度 动态扩展,C语言中的String占多少内存是固定的,进行拼接之类操作如果不提...原创 2020-02-17 19:32:02 · 207 阅读 · 0 评论 -
redis设计之sentinel分析
sentinel系统通过监视主服务器及其从服务器的状态保证了redis的高可用 首先明确sentinel是配置中心而不是代理中心。 当设定的主服务器掉线超过设定的下线时长时,sentinel会挑选一个从服务器作为主服务器,并且监视已经下线的主服务器,当主服务器再次上线时,让他作为新的主服务器的从服务器 启动并初始化Sentinel的过程 初始化服务器,类似于初始化普通的redis服务器,但是不需...原创 2019-09-06 18:38:41 · 173 阅读 · 0 评论 -
redis底层数据结构分析
SDS Simple Dynamic String SDS结构定义 struct sds{ // SDS所保存字符串长度,即buf数组中已使用字节数量 int len; // buf数组中未使用字节的数量 int free; // 保存字符串的字节数组 char[] buf; } 相比C语言优势: 得到数组长度时间复杂度由O(n)变为O(1),直...原创 2019-09-06 19:58:34 · 101 阅读 · 0 评论 -
redis设计之集群分析
集群由redis服务器节点组成,通过节点间互相meet握手构成集群 节点握手: 两次握手过程如下所示: 收到meet命令的节点A将会与节点B进行握手,以此来确认彼此的存在 节点A将会为节点B创建一个 clusterNode结构,并将该结构添加到自己的clusterState.nodes字典 节点B收到节点A的MEET,B为A创建一个clusterNode结构,并将该结构添加到自己的cluster...原创 2019-09-08 20:38:00 · 108 阅读 · 0 评论 -
redis设计之持久化设置
redis的过期键删除策略 定时删除:为每个键设置过期时间的同时,设置一个定时器,即一过期就删除,这个方法对内存友好,但是没过期时维持大量的计时器对CPU不好 惰性删除:放任不管,用到一个键时,坚持该键是否过期,过期的话删除,否则不删除 定期删除: 每隔一段时间,对数据库进行检查,删除过期的键盘。 redis配合使用惰性和定期两种策略 RDB 执行SAVE或者BGSAVE创建一个RDB时,程序会对...原创 2019-09-09 16:16:18 · 113 阅读 · 0 评论 -
redis设计之发布与订阅
频道的订阅与退订 客户端执行SUBSCRIBE/UNSUBSCRIBE 来订阅和退订频道 REDIS服务器将所有频道的订阅关系保存在服务器状态的pubsub_channels字典里面,这个字典的键是某个频道,值是所有订阅了这个频道的客户端组成的链表 订阅频道: 遍历所有频道列表,若是没找到该频道,字典中添加channel键,设置值为空链表,最后将客户端加入链表末尾;若是遍历的过程中找到,直接加入末...原创 2019-09-09 16:17:30 · 89 阅读 · 0 评论