当访问redis中键值对时会判断这个键值对是否过时,若是过时的话就会删除这个键值对并返回nilredis
为了弥补惰性删除对于内存的不友好,redis中还有一种过时策略即按期删除。当一个键值对设置expire后,redis中会维护一个过时字典。这个过时字典在redis中会使用serverCron时间事件轮训,轮训过时键值对进行释放bash
redis.conf配置文件中hz
配置项配置serverCron每秒执行次数,默认10表示每100ms执行一次serverCron。redis中限制每次过时key清理时间不超过CPU时间的25%,这段时间内会执行以下步骤操做:dom
物理机的内存空间是有限的,当全部内存被占满之后redis接收到写操做命令应该怎么处理?相关的清理策略又是什么?spa
redis.conf
配置文件中maxmemory参数设置redis占用内存的大小,当超过这个值限定之后将会根据maxmemory-policy
设置清理redis内存对象。有关这个maxmemory提醒一点:code
清理策略划分能够分为两个维度三个方面,两个维度分别是过时键中筛选
、全部键中筛选
,三个方面分别是lru
、ttl
、random
server
# 策略启动阈值
maxmemory <bytes>
# 清理策略类型
# 默认不清理直接返回异常noeviction
maxmemory-policy noeviction
# 如策略采用volatile-lru,每次删除会选择参数设置个数样本键值对
# 而后删除其中lru时间最长的键值对
# 源码注释中告诉咱们默认参数5比较合适
# 10的话淘汰的ttl或者lru精度很高,可是CPU消耗比较大
# 3的话会很快,可是精度不会过高
maxmemory-samples 5
复制代码