Redis 设计与实现
内容:
- 字符串(string)、散列(hash)、列表(list)、集合(set)和有序集合(sorted set)五种类型的键的底层实现。
- Redis 的对象处理机制以及数据库的实现原理。
- 事务实现原理。
- 订阅与发布实现原理。
- Lua 脚本功能的实现原理。
SORT命令的的实现原理。BITOP、BITCOUNT等二进制位处理命令的实现原理。- 慢查询日志的实现原理。
- RDB 持久化和 AOF 持久化的实现原理。
- Redis 事件处理器的实现原理。
- Redis 服务器和客户端的实现原理。
- 复制(repication)、Sentinel 和集群(cluster)这三个多机功能的实现原理。
二、简单动态字符串
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符串数组),而是自己构建了一种名为简单动态字符串(Simple Dynamic String,SDS)的抽象类型,并将 SDS 作为 Redis 的默认字符串表示。
1 | struct sdshdr { |
设计原因:
- 获取字符串长度所需复杂度从 O(N) 降低到 O(1),确保获取字符串长度不会成为性能瓶颈。
- 杜绝缓冲区溢出。(忘记分配足够内存时)
- 减少修改字符串带来的内存重分配次数。(增长字符串需要扩展底层数组长度,相反需要释放空间)
- xxxx