Redis拓展篇----过期策略

Redis的过期策略

Redis中的过期:Redis中所有的数据结构都可以设置过期时间,时间一到就会被自动删除。
Redis为单线程,如何保证在删除过期key时保证线上的读写不出现卡顿?

1、过期的key集合

Redis中将每个设置了过期时间的key放入一个独立的字典中,Redis会定时遍历这个字典,来删除到期的key
删除策略:主要是定时删除(集中处理)和惰性删除(零散处理)
惰性删除:在客户端访问key时查询key是否过期,过期就会删除

2、定时扫描策略

Redis默认每秒进行10次,扫描时使用的贪心策略步骤如下:

  1. 从过期字典中随机选出20个key
  2. 删除20个key中已经过期的key
  3. 如果过期的key的比例超过1/4,就重复步骤(1)
    为了保证不出现线程卡死的现象,算法中增加了扫描时间的上限,默认不会超过25ms
    注意:
    在设置redis中key的过期时间时,应该避免出现大量的key在同一时间过期,大量的key同一时间过期会导致读写卡顿。
    卡顿的另一种情况是由于在删除key时内存管理器需要频繁回收内存页,这也会产生一定的cpu消耗。
    如果必须要在同一时间删除key,应该给过期时间设置一个随机范围,即将过期时间随机化

3、从节点的过期策略

在Redis中从节点不会进行过期扫描,从节点对过期的处理是被动的,主节点在key到期时会在AOF文件里增加一条del指令,同步到所有的从节点

你可能感兴趣的:(Redis)