redis 设计与实现--读书笔记

最近在读黄健宏的《Redis设计与实现》一书,记录部分知识点,以便以后查阅。

第一部分  数据结构

      1. redis基本数据类型:string, list, hash, set, zset;

      2. string 底层实现为 sds (simple dynamic string), 对比C的字符串优点为:

             A. O(1)复杂度获取字符串长度(结构体内记录了长度);

             B.  杜绝缓冲区溢出;

             C.  减少修改字符串时需要的内存重分配次数(通过预留空间实现);

              D. 二进制安全(不是以\0作为结束符,而是以长度);

              E. 兼容部分C字符串函数(个人认为不是相对C字符串的优点)。

      3. 字典

              A.   底层实现为哈希表,采用连地址法解决键冲突(通过哈希表节点(dictEntry)的next指针);

              B.   使用MurmurHash2算法计算键的哈希值,即使输入的键是有规律的,算分仍能给出一个很好的随机分布性,并且速度很快;

              C.  rehash, 渐进式rehash

 

第二部分   数据库

         1. 过期数据删除策略:

              A.. 定时删除---对内存友好,对CPU不友好;

              B.  惰性删除---对CPU友好,对内存不友好;

             C.  定期删除--- A、B的综合

              redis实际使用 B、C综合

          2. 过期数据对RDB和AOF的影响

              如果服务器以主服务器模式运行,载入RDB文件时会忽略过期数据,如果以从服务器模式运行,则不会忽略过期数据,但主从服务器做数据同步时,则会清除从服务器上的过期数据。

             当服务器以AOF持久化模式运行时,过期数据被删除后,才会向AOF文件追加一条DEL命令。

              AOF文件载入时,过期数据不会保存到重写的AOF文件;

          3. 当服务器运行在复制模式时,从服务器的过期键删除由主服务器控制--当主服务器删除一个过期键后,会向所有从服务器发送一条DEL命令,通知从服务器;

                从服务器在执行客户端读命令时,即使碰到过期键也不会将其删除,而是像处理未过期键一样来处理;通过主服务器控制从服务器统一删除过期键,保证主从服务器数据的一致性。

未完待续

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值