数据持久化方式
RDB
全量快照
备份方式
bgsave
创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,<br>这也是 Redis RDB 文件生成的默认配置。
AOF+RDB混合
内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作
分布式锁
// 加锁, unique_value作为客户端唯一性的标识<br>SET lock_key unique_value NX PX 10000
数据淘汰策略
volatile-lru: 从已设置过期的数据中中随机挑选最近最少使用的多个key进行数据淘汰。
volatile-ttl: 从已设置过期的数据中挑选即将要过期的数据进行淘汰。
volatile-random:从已设置过期的数据中任意淘汰数据。
volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。
allkeys-lru: 从数据集中挑选最近最少使用的数据淘汰。<br>
allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。
allkeys-random:从数据集中任意选择数据淘汰。
noeviction: 不进行删除,达到最大内存时,直接返回错误信息。
单线程的Redis为什么快
纯内存操作
高效的数据结构
单线程,避免了不必要的上下文切换和竞争条件
I/O多路复用,如Linux下的poll,epoll,select多路复用是指使用一个线程来检查多个文件符FD(socket,文件,管道)的就绪状态;<br>比如select和poll函数,传入多个文件描述符,一个文件符就绪,则返回,否则阻塞直到超时。<br>
IO多路复用
select
基于轮训机制,默认最大支持1024个fd文件描述符
poll
基于轮训机制,没有最大文件描述符数量限制