redis单线程为什么这么快?
快的原因:
- 首先redis不是完全单线程的,一些耗时操作也会异步去处理,比如持久化相关的工作(RDB和AOF重写)。
- 是基于内存操作的。
- 基于IO多路复用,不在网络IO上浪费时间。
单线程的原因:
- redis的瓶颈在内存大小或网络带宽上,而不在cpu上。
- 单线程可以避免线程上下文切换和锁争用。
其他
RDB:持久化某个时间点的数据快照。
实现:通过fork一个子进程来完成。
fork使用了“写时复制”(COW)技术,fork后,父子进程使用不同的虚拟内存空间,但用的是相同的物理内存空间。只有当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。
AOF:追加写操作。
缺点:AOF文件大。
所以有AOF后台重写。
也是通过fork子进程来完成。
把数据快照转化成一个个写操作。
redis过期策略:
定期删除+惰性删除
定期删除:【在过期字典里】,定期随机检查一部分key。
内存淘汰策略:
采样一定数量的key,然后LRU。
网友评论