Redis过期策略和内存淘汰机制

场景:Redis只能存5G数据,写入10G数据

Redis过期策略:定期删除+惰性删除策略

  • 定期删除:默认100ms检查是否有过期的key,有过期key则删除。redis不会检查所有key,而是随机抽取进行检查。

因此,可能会导致很多key过期没有删除。

  • 惰性删除策略:在获取key的时候,redis会检查key是否过期。

可能存在的问题:定期删除没有删除key,也没有请求获取key,也就是说没有被惰性删除,这个key一起存在。

 

可采用内存淘汰机制:

  • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。应该没人用吧。
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。推荐使用,目前项目在用这种。
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。应该也没人用吧,你不删最少使用Key,去随机删。
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把redis既当缓存,又做持久化存储的时候才用。不推荐
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。依然不推荐
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。不推荐

如果key没有设置过期时间,内存不足时,写入数据会报错

你可能感兴趣的:(Redis过期策略和内存淘汰机制)