2.1 数据结构
2.1.1. 五种数据结构
可以通过 type key
的方式来查看对应点数据存储类型
- 字符串 string
- 集合 set
- 有序集合 zset
- 列表 list
- 哈希 hash
2.1.2. 内部编码
实际上, 每种数据结构都有自己底层的内部编码实现, 而且是多种实现, 以便Redis在合适的场景选择合适的内部编码. 可以通过object encoding key
命令查看对应点内部编码
string
: raw, int, embstr
hash
: hashtable, ziplist
list
: linkedlist, ziplist
set
: hashtable, intset
zset
: skiplist, ziplist
使用多种内部编码的好处主要有二
- 可以在用户无感知的情况下改进内部编码
- 可以在适当的情况选择合适点编码方式 比如ziplist比较节省内存,但是当list元素过多时,性能下降时可以转用linkedlist
2.2 单线程架构
使用epoll作为多路I/O复用技术的实现, 即使是本身单线程的情况下, 依然保持很快的处理速度, 而且避免了多线程竞态, 和线程切换带来的损耗, 当多个客户端同时向redis发送命令时, redis并不保证执行顺序, 但是, 不会同时执行两条命令,导致数据安全的问题