Redis的key过期策略及内存淘汰策略【二】

1. Redis键过期策略

  当Redis中key到达了设定的过期时间,Redis怎么样删除这些过期的key呢?Redis提供了三种过期策略来删除过期的key,分别是定时策略、惰性策略、定期策略。
  Redis同时使用了惰性策略与定期策略来删除过期的key。

1.1 定时策略

  每个设置了过期时间的key,都设置一个定时器。当key到达过期时间时,定时器启动,删除过期的key。(相当于给key设置了一个定时炸弹,定时(过期)时间一到,定时炸弹就启动,炸掉该key)。
  该策略对内存非常友好,因为key一旦到期,就立即从内存中删除,但是会占用大量的CPU资源去处理过期的key,会导致缓存的qps的吞吐量降低。

1.2 惰性策略

  当key过期之后,不会立刻被删除,只有在它被访问的时候,先判断其是否过期,若过期就立刻删除并返回空。(只有当过期的key被访问时,过期的key才被删除)
  该策略对内存非常不友好,极端情况下会导致大量过期的key未被删除,占用内存。 相对于定时策略对CPU资源非常友好。

1.3 定期策略

  每隔一段时间会扫描一定数量设置了过期时间的key,并删除已过期的key。
  该策略是是前俩者的一个折中方案,通过调整扫描的时间间隔和每次扫描的限定耗时,可以让内存与CPU资源达到最优的平衡效果。

2. Redis内存淘汰策略

  Redis内存淘汰策略指当缓存内存不足时,通过淘汰旧数据来为新数据提供存储空间选择的策略。
  内存淘汰策略分俩类,每类 4 种,总 8 种。第一类策略针对于所有的key,第二类策略针对于设置了过期时间的key。

2.1 第一类内存淘汰策略

  该策略针对于Redis中所有的key都起作用。

2.1.1 noeviction

  默认策略,不淘汰key,当内存满了之后,新增数据会直接返回错误。

2.1.2 allkey-lru【推荐】

  LRU(less recently used),最近最少使用,从抓取的所有key中使用近似LRU算法进行淘汰。

2.1.3 allkey-lfu

  LFU(less frequently used),最少使用频率,从抓取的所有的key中使用近似LFU算法进行淘汰。

2.1.4 allkey-random

  从抓取的所有key中,随机淘汰一个。

2.2 第二类内存淘汰策略

  该策略只针对设置了过期时间的key。

2.2.1 volatile-lru

  ;LRU(less recently used),最近最少使用,从抓取的所有key(key设置了过期时间)中使用近似LRU算法进行淘汰。

2.2.2 volatile-lfu

  LFU (less frequently used),最近最少使用,最近最少使用,从抓取的所有key(key设置了过期时间)中使用近似LFU算法进行淘汰。

2.2.3 volatile-random

  从抓取的所有key(key设置了过期时间)中,随机淘汰一个。

2.2.3 volatile-ttl

  TTL(time to live)从抓取的所有key(key设置了过期时间)中,选择越早到期的key进行淘汰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值