关于redis:Redis的设计与实现总结

4次阅读

共计 1043 个字符,预计需要花费 3 分钟才能阅读完成。

集体真的很喜爱这本书, 从对 C 语言无所不通, 到发现 C 语言居然如此简洁, 以至于我喜爱上了 C! 对此后面的底层数据结构也读了几次, 大抵整顿了书里的内容, 前面的就粗略看了一下, 不再细细整顿了.

Redis 的设计与实现 (1)-SDS 简略动静字符串
Redis 的设计与实现 (2)- 链表
Redis 的设计与实现 (3)- 字典
Redis 的设计与实现 (4)- 跳跃表
Redis 的设计与实现 (5)- 整数汇合
Redis 的设计与实现 (6)- 压缩列表

整体的感悟吧, 感觉 Redis 的作者, 对每一块内存十分悭吝, 为了节俭内存而制作出各种各样的编码和技巧. 浏览源码的过程中, 也学习到了宏的技巧, 比如说:

#define ZIP_ENTRY_ENCODING(ptr, encoding) do {  \
    (encoding) = (ptr[0]); \
    if ((encoding) < ZIP_STR_MASK) (encoding) &= ZIP_STR_MASK; \
} while(0)

大量的应用 do {...} while(0) , 上网找过, 说这样写宏开展后就不会编译谬误, 当然情理是浅显易懂的. 有些函数, 比方下面的 ZIP_ENTRY_ENCODING , 如果写成真真正正的函数, 会减少函数调用栈的开销, 据说 << C 和指针 >> 这本书会提及, 筹备有工夫好好看看.

源码的正文版, 真的很好, Redis 的代码读起来也还是比拟亲切. 工作上, 已经排查线上 Nginx 的 bug , 精确来说, 应该是 API 网关 kong, 它联合了 OpenResty, 对于 URL 字符串的编码问题, 具体的记不清了, 但外面对字符串的 URL 编码, 用的是查表法和位运算, 这样的转换函数真的是艰涩难懂. 程度真的无限, 我也是求教了共事, 他在 DevCPP 外面逐行调试才晓得的.


这本书的前面几局部, 最开始是几个底层数据结构, 而后是对象, 第二局部是单机数据库, 包含 RDB 长久化 和 AOF 长久化, 事件, 客户端和服务端; 第三局部是多机数据库的实现, Redis 集群等, 这一块我还没实际过; 第四局部是比拟杂的性能, 蕴含了公布订阅, 事务, Lua 脚本, 慢日志以及一些命令的实现. 可能也得之后有工夫再刷刷看了.

明确一下指标: 很喜爱 C 语言, 筹备找工夫看看 << C 和指针 >>, 而后买本轮子哥始终推的 << C++ Primer 5 >> , 越来越发现底层的世界, 真的是很好玩啊! 特地是, 对于每一块内存, 得心应手的管制, 这种感觉真的是爽爆了!!!


文章来源于自己博客,公布于 2018-06-05,原文链接:https://imlht.com/archives/145/

正文完
 0