Redis的设计与实现-总结

本文涉及的产品
云数据库 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
目录
相关文章
|
5天前
|
存储 缓存 NoSQL
Redis实现延迟任务的几种方案
Redis实现延迟任务的几种方案
|
22天前
|
存储 人工智能 NoSQL
Redis的未来
【翻译】来自redis官网对未来的规划
171 0
|
2月前
|
NoSQL Java API
lua+redis:分布式锁解决方案
分布式锁的是确保在多个进程或多个节点之间对共享资源的访问是有序、互斥和原子的,以避免竞态条件和数据不一致性问题。在多进程或多节点环境中,分布式锁广泛应用于协调共享资源的安全访问。
27 1
|
8月前
|
缓存 NoSQL 关系型数据库
|
9月前
|
NoSQL 关系型数据库 MySQL
Redis1
Redis1
43 0
|
9月前
|
存储 JSON 自然语言处理
Redis基础学习
Redis基础学习
72 0
|
11月前
|
消息中间件 存储 缓存
【Redis核心知识 四】Redis分布式锁实战(上)
【Redis核心知识 四】Redis分布式锁实战(上)
144 0
|
11月前
|
NoSQL 安全 Java
Redis实战(1)
Redis实战(1)
|
11月前
|
NoSQL 安全 Unix
Redis (必看)
Redis 学习点滴 知识分享
62 0
|
12月前
|
存储 SQL 缓存