Redis的设计与实现-总结

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 个人真的很喜欢这本书, 从对C语言一窍不通, 到发现C语言竟然如此简洁, 以至于我喜欢上了C! 整体的感悟吧, 觉得 Redis 的作者, 对每一块内存非常吝啬……

个人真的很喜欢这本书, 从对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-02,原文链接:https://imlht.com/archives/145/

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
16天前
|
存储 消息中间件 NoSQL
【redis】redis的特性和主要应用场景
【redis】redis的特性和主要应用场景
57 1
|
1月前
|
缓存 NoSQL Java
Redis基础
redis下载、安装、启动、五种数据类型、常用命令、springboot使用Redis、lettucs、jedis
Redis基础
|
1月前
|
缓存 NoSQL 安全
Redis的原理(一)
Redis的原理(一)
|
1月前
|
存储 缓存 NoSQL
redis的原理(四)
redis的原理(四)
|
1月前
|
存储 缓存 NoSQL
redis的原理(二)
redis的原理(二)
|
2月前
|
存储 NoSQL Redis
redis基础
redis基础
20 0
|
4月前
|
存储 NoSQL 关系型数据库
|
5月前
|
存储 NoSQL 关系型数据库
Redis基础1
Redis基础
33 0
|
5月前
|
存储 NoSQL Java
Redis基础2
Redis基础
28 0
|
5月前
|
存储 缓存 NoSQL
Redis实现延迟任务的几种方案
Redis实现延迟任务的几种方案