首先,需要明确,Redis只有redis-server是单线程的,指所有的命令处理流程在一个线程中处理。
- Redis是内存数据库,所有操作都是基于内存的, 不是CPU密集型的。
- 数据结构高效,不同的对象类型有不同的具体实现。 - string: - int
- raw
- embstr
 
- list: quicklist, 节点采用ziplist
- hash: - ziplist
- dict
 
- set: - intset
- dict
 
- zset: - ziplist
- skiplist
 
 
- string: 
- 如果是多线程,那么就需要加锁,Redis中sds, list, hash, set, zset都有多种不同的实现,因此锁的粒度不好控制同时会导致CPU频繁的上下文切换。
- 对于网络连接,实际上采用的是Reactor网络模型,多路IO复用,非阻塞IO。
- 单线程所作的优化(耗时阻塞的操作,另起线程处理): - 异步关闭大文件 bio-close-file
- 异步释放大内存 bio-lasy-free
- 异步AOF刷盘 bio-aof-fasync
- 内存池分配 jemalloc-bg-threads
- IO多线程 io-threadsread/write/decode/encode
- 将大操作拆分成小操作 - 渐进式rehash: ①分散在每一步操作中,移动一个 ②空闲时,rehash 1ms
 
- 根据对象选择不同的数据结构 - 根据节点的数量动态选择数据结构
- 在时间和空间上进行均衡
 
 
- 异步关闭大文件 
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB