redis的过期策略以及内存淘汰机制

过期策略

Redis允许对键设置过期时间,到期后键会自动删除。设置过期时间的主要命令有:

  • EXPIRE key seconds:设置键在指定秒数后过期。
  • PEXPIRE key milliseconds:设置键在指定毫秒数后过期。
  • EXPIREAT key timestamp:设置键在指定的UNIX时间戳(秒)过期。

设置键在指定的UNIX时间戳(秒)过期,意思是让Redis中的某个键在特定的时刻自动删除。这个时刻是用UNIX时间戳表示的,UNIX时间戳是自1970年1月1日00:00:00 UTC起的秒数。通过这种方式,你可以精确地控制键在未来的某个具体时间点过期。

  • PEXPIREAT key milliseconds-timestamp:设置键在指定的UNIX时间戳(毫秒)过期。
  • TTL key:查看键的剩余生存时间(秒)。
  • PTTL key:查看键的剩余生存时间(毫秒)。

Redis过期键的删除方式有三种:

  • 定时删除:在设置过期时间时,创建一个定时器,到期立即删除键。这种方式内存友好,但对CPU不友好,因为需要为每个过期键创建定时器。
  • 惰性删除:访问键时检查是否过期,如果过期则删除。这种方式CPU友好,但可能会占用不必要的内存,因为过期键不会立即删除。
  • 定期删除:每隔一段时间随机检查部分键,删除过期的键。这种方式是定时删除和惰性删除的折中,既不占用过多内存,也不会对CPU产生过大负担。

内存淘汰机制

当Redis内存达到限制时,触发内存淘汰机制。Redis的内存淘汰策略有多种,可以通过配置maxmemory-policy参数设置。以下是几种常见的淘汰策略:

  • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,不会淘汰任何数据。这是默认策略。
  • allkeys-lru:使用最近最少使用(LRU)算法,淘汰所有键空间中最近最少使用的键。
  • volatile-lru:使用LRU算法,淘汰设置了过期时间的键空间中最近最少使用的键。
  • allkeys-random:在所有键空间中随机淘汰键。
  • volatile-random:在设置了过期时间的键空间中随机淘汰键。
  • volatile-ttl:在设置了过期时间的键空间中,优先淘汰存活时间(TTL)最短的键。
  • allkeys-lfu:使用最近最少使用(LFU)算法,淘汰所有键空间中最近最不常使用的键。
  • volatile-lfu:使用LFU算法,淘汰设置了过期时间的键空间中最近最不常使用的键。

选择合适的淘汰策略

选择合适的淘汰策略取决于具体的应用场景:

  • 需要严格控制内存使用并保证写操作不会失败:选择allkeys-lru或allkeys-lfu,以确保内存使用在限制范围内,并且删除最近最少使用或最不常使用的键。
  • 大多数键都有过期时间,并且希望优先淘汰那些即将过期的键:选择volatile-lru或volatile-ttl。
  • 需要随机淘汰一些键,以减少淘汰算法的开销:选择allkeys-random或volatile-random。
  • 希望写操作在内存不足时直接失败:保持默认策略noeviction。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值