Redis过期键删除机制与内存淘汰策略

1. 过期键删除机制

Redis使用的过期键删除机制是:惰性删除+定期删除

惰性删除

  • 策略:每次从键空间获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键;
  • 惰性删除的优点:CPU友好,不会占用太多CPU时间;
  • 惰性删除的缺点:内存不友好,浪费内存空间,有内存泄露的危险:
    • 如果数据库中有非常多的过期键,而这些过期的键又恰好没有被访问到的话,那么它们将永远不会被删除(除非手动执行flushdb),这样有可能导致内存泄露
    • 内存泄露:无用的垃圾数据占用了大量的内存,而服务器却不会去释放它们;

定期删除

  • 策略:每隔一段时间,程序就对数据库进行一次检查,删除里面过期的键;
  • Redis的定期删除:在规定的时间内分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其他的过期键;

2. 内存淘汰策略

  • 如果redis达到最大使用内存时,会进行内存淘汰。
  • 最大内存设置参数:
maxmemory <bytes>

内存淘汰策略有:

  1. LRU: 淘汰最久未使用的键值对
  • volatile-lru:在设置了过期时间的key中淘汰最长时间未使用的 ;
  • allkeys-lru:在全部key中淘汰最长时间未使用的;
  1. LFU: 淘汰最近最少使用的键值对
  • volatile-lfu:在设置了过期时间的key中淘汰最近最少使用的;
  • allkeys-lfu:在全部key中淘汰最近最少使用的;
  1. Random: 随机淘汰键值对
  • volatile-random:在设置了过期时间的key中随机删除;
  • allkeys-random:在全部key中随机删除;
  1. TTL:删除最早过期的键值对
  • volatile-ttl:在设置了过期时间的key中删除最早过期的;
  1. NO:不淘汰键值对,拒绝新写入操作
  • noevication:不删除key,对新的写操作返回一个错误;

备注:LRU与LFU

# LRU means Least Recently Used 最久未使用
# LFU means Least Frequently Used 最近最少使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值