Redis设计与实现 学习笔记
Redis设计与实现 学习笔记
写在前面
这本书主要是讲Redis底层的实现,总体上分为四部分:
- 数据结构与对象
- 单机数据库的实现
- 多机数据库的实现
- 独立功能的实现
这个顺序和作者自己学习的顺序应该是一致的,但是感觉有一点不合理:在刚开始看的时候一直比较着急,因为是在对Redis整体上没有概念的情况下看细节。
Redis设计与实现 第二版 高清PDF 下载
学习笔记
在Redis中键为字符串、值为对象,底层处理用到的数据结构有:
- 动态字符串:使用预分配和惰性释放来减少内存操作次数
- 链表
- 字典:渐进式rehash防止卡住
- 跳跃表
- 整数集合:有序、不重复的整数集合,在必要的时候升级来节约内存
- 压缩列表:连续内存保存整数或字节的列表,通过压缩来节省内存
- 对象:在Redis中都是对象,实现基于上面的数据结构
由于Redis是用C编写的,没有垃圾回收机制,因此在对象系统中构建了一个引用计数实现内存回收器,通过该机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。
有了这些基础就可以开始看Redis作为一个服务器是如何工作的:
+-------------+ | redisServer | +------+------+ | +-----------+ +------+------+ +-----------+ |redisClient+-----+ redisDb +--+---+ dict | +-----------+ +-------------+ | +-----------+ | redisDb | | +-------------+ | +-----------+ | redisDb | +---+ expires | +-------------+ +-----------+
其中:
- dict:键空间
- expires:键的过期时间
还有另外一种做过期时间的方法是:对dict上的键做扩展,增加过期时间字段。和Redis的做法相比可能有几个缺点:浪费空间、遍历时浪费时间、结构不清晰。过期键的删除有三种策略:
- 定时删除:在设置键的过期时间时创建Timer,当Timer运行时执行删除操作
- 惰性删除:在取值时判断是否过期,如果过期则删除
- 定期删除:每隔一段时间对数据库进行检查扫描,删除里面过期的键
定时删除显然不靠谱,在Redis中同时使用了定期删除和惰性删除,当然在持久化程序中也需要考虑过期时间。
下面关于Redis的文章您也可能喜欢,不妨参考下:
Ubuntu 14.04下Redis安装及简单测试
Redis主从复制基本配置
Redis集群明细文档
Ubuntu 12.10下安装Redis(图文详解)+ Jedis连接Redis
Redis系列-安装部署维护篇
CentOS 6.3安装Redis
Redis安装部署学习笔记
Redis配置文件redis.conf 详解
Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里
本文永久更新链接地址:
评论暂时关闭