redis设计与实现
文章平均质量分 90
本专栏分享本人的读书笔记,感谢本书作者黄健宏的知识传递。
山竹果
这个作者很懒,什么都没留下…
展开
-
redis设计与实现(三)整数集合与压缩列表
虽然contents数组保存的四个整数值中,只有-2675256175807981027是真正需要用int64_t类型来保存的,而其他的1、3、5三个值都可以用int16_t类型来保存,不过根据整数集合的升级规则,当向一个底层为int16_t数组的整数集合添加一个int64_t类型的整数值时,整数集合已有的所有元素都会被转换成int64_t类型,所以contents数组保存的四个整数值都是int64_t类型的,不仅仅是-2675256175807981027。原创 2024-06-06 09:17:25 · 1064 阅读 · 0 评论 -
redis设计与实现(三)集合对象和有序对象
除此之外,zset结构中的dict字典为有序集合创建了一个从成员到分值的映射,字典中的每个键值对都保存了一个集合元素:字典的键保存了元素的成员,而字典的值则保存了元素的分值。zset结构中的zsl跳跃表按分值从小到大保存了所有集合元素,每个跳跃表节点都保存了一个集合元素:跳跃表节点的object属性保存了元素的成员,而跳跃表节点的score属性则保存了元素的分值。intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。集合对象保存的所有元素都是整数值;原创 2024-06-09 13:04:53 · 676 阅读 · 0 评论 -
redis设计与实现(二)字典
根据BGSAVE命令或BGREWRITEAOF命令是否正在执行,服务器执行扩展操作所需的负载因子并不相同,这是因为在执行BGSAVE命令或BGREWRITEAOF命令的过程中,Redis需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)技术来优化子进程的使用效率,所以在子进程存在期间,服务器会提高执行扩展操作所需的负载因子,从而尽可能地避免在子进程存在期间进行哈希表扩展操作,这可以避免不必要的内存写入操作,最大限度地节约内存。分配一个空白哈希表,如图4-11所示。原创 2024-06-04 13:17:36 · 1015 阅读 · 0 评论 -
Redis设计与实现(一)SDS与C字符串的对比
sds的定义:可以看到,这四种的整体结构是很像的,区别只是 len alloc 的取值范围不同,意即它们能容纳的 sds 字节数不同。SDS遵循C字符串以空字符结尾的惯例,好处是SDS可以直接重用一部分C字符串函数库里面的函数。举个例子:打印出SDS保存的字符串值,而无须为SDS编写专门的打印函数。原创 2024-06-02 18:28:27 · 1042 阅读 · 0 评论