这本书主要是讲Redis底层的实现,总体上分为四部分:
这个顺序和作者自己学习的顺序应该是一致的,但是感觉有一点不合理:在刚开始看的时候一直比较着急,因为是在对Redis整体上没有概念的情况下看细节。
在Redis中键为字符串、值为对象,底层处理用到的数据结构有:
由于Redis是用C编写的,没有垃圾回收机制,因此在对象系统中构建了一个引用计数实现内存回收器,通过该机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。
有了这些基础就可以开始看Redis作为一个服务器是如何工作的:
+-------------+ | redisServer | +------+------+ | +-----------+ +------+------+ +-----------+ |redisClient+-----+ redisDb +--+---+ dict | +-----------+ +-------------+ | +-----------+ | redisDb | | +-------------+ | +-----------+ | redisDb | +---+ expires | +-------------+ +-----------+
其中:
还有另外一种做过期时间的方法是:对dict上的键做扩展,增加过期时间字段。和Redis的做法相比可能有几个缺点:浪费空间、遍历时浪费时间、结构不清晰。过期键的删除有三种策略:
定时删除显然不靠谱,在Redis中同时使用了定期删除和惰性删除,当然在持久化程序中也需要考虑过期时间。