《极客时间-Redis核心技术与实战》学习笔记

 

数据结构

  1. Redis数据类型和底层数据结构的对应关系:String -> 简单动态字符串,List -> 双向链表、压缩列表,Hash -> 压缩列表、哈希表,Sorted Set -> 压缩列表、跳表,Set -> 哈希表、整数数组。
  2. 哈希表rehash高效操作:默认使用两个全局哈希表,默认使用哈希表1,rehash时,给哈希表2分配更大的空间,把哈希表1的数据重新映射到哈希表2,释放哈希表1的空间。重新映射时,无法处理客户端请求,会造成线程阻塞,采用“渐进式rehash”解决:重新映射数据时,仍然正常处理客户端请求,每处理一个请求,从哈希表1的第一个索引位置开始,将这个索引位置上所有entries拷贝到哈希表2中,等处理下一个请求时,再顺带拷贝哈希表1的下一个索引位置的数据。在rehash被触发后,即使没有收到新请求,Redis也会定时执行一次rehash操作(定时任务)。

     

  3. rehash的条件:Redis会使用装载因子(load factor)来判断是否需要做rehash。装载因子的计算方式是,哈希表中所有entry的个数除以哈希表的哈希桶个数。Redis会根据装载因子的两种情况,来触发rehash操作:装载因子≥1,同时,哈希表被允许进行rehash;装载因子≥5。装载因子等于1说明所有键值对平均分配在哈希桶中无需rehash。在进行RDB生成和AOF重写时,哈希表的rehash是被禁止的。装载因子大于等于5时,就表明当前保存的数据量已经远远大于哈希桶的个数,哈希桶里会有大量的链式哈希存在,性能会受到严重影响,此时,就立马开始做rehash。
  4. 压缩列表:实际上类似于一个数组,表头有三个字段zlbytes、zltail、zllen,分别表示列表长度、列表尾的偏移量、列表中entry个数;表尾还有zlend,表示列表结束。

     

  5. 跳表:增加多级索引,通过索引位置的几个挑战,实现数据的快速定位。

  6. 数据结构的时间复杂度:

  7. 单线程快的原因:高效的数据结构、IO多路复用。

AOF

  1. WAL:Write Ahead Log,数据库写前日志,AOF:写后日志,先执行命令,再写日志。写日志时无需校验命令是否正确。
  2. AOF日志格式:*3:命令有3个部分,$+数字:命令或键值有多少个字节。

  3. AOF三种写回策略:Always:同步写回,每个写命令执行完,立马同步地将日志写回磁盘;Everysec:每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区的内容写入磁盘;No:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值