Redis过期策略和删除策略详解

Redis过期策略和删除策略详解-mikechen

Redis的过期策略和删除策略是非常重要的,下面分别介绍一下:

1. 过期策略

Redis通过设置键的过期时间来实现过期策略,当一个键设置了过期时间后,在该时间到达后,Redis会自动将该键从数据库中删除。

Redis的过期时间有两种设置方式:

一种是使用`EXPIRE key seconds`命令设置固定的过期时间;

另一种是在键的值上设置时间戳,并设置`EXPIREAT key timestamp`指定该键的过期时间。

示例如下:

  1. # 设置键"mykey"的过期时间为10秒
  2. > EXPIRE mykey 10
  3.  
  4. # 设置键"mykey"的过期时间为60分钟
  5. > EXPIRE mykey 3600
  6.  
  7. # 设置键"mykey"的过期时间为2023年12月31日23:59:59
  8. > EXPIREAT mykey 1672511999
  9.  
  10. # 设置键"mykey"的过期时间为10毫秒(以毫秒为单位)
  11. > PEXPIRE mykey 10
  12.  
  13. # 设置键"mykey"的过期时间为1小时30分钟(以毫秒为单位)
  14. > PEXPIRE mykey 5400000
  15.  
  16. # 设置键"mykey"的过期时间为UNIX时间戳为1672511999的时间点
  17. > PEXPIREAT mykey 1672511999000

在上述示例中,我们使用了EXPIRE命令和PEXPIRE命令来设置键的过期时间,EXPIRE命令接受以秒为单位的过期时间,而PEXPIRE命令接受以毫秒为单位的过期时间。

同时,Redis还支持延长键的过期时间,即使用`TTL key`命令可以查看剩余的时间。

 

2. 删除策略

Redis的内存是有限的,当内存不足时,Redis就需要进行删除操作来释放一些空间。Redis的删除策略主要有以下几种:

1)定期删除策略

定期删除指的是: redis 默认每 100ms 就随机抽取一些设置了过期事件的 key ,检查是否过期,如果过期就删除。

定期删除策略的工作原理如下:

  1. Redis每秒钟执行一次定期删除操作,称为定时器事件(定时器事件可以在Redis配置文件中通过hz参数进行配置)。
  2. 定期删除操作会随机抽取一些过期键进行检查,并删除已过期的键,这样可以分散删除操作的负载,避免一次性删除大量过期键对性能造成影响。
  3. 定期删除操作使用的算法类似于Random删除策略,即随机选择要删除的过期键,Redis通过检查键的过期时间戳来判断键是否过期,并将已过期的键删除。

你可以通过以下配置项来调整Redis的定期删除策略:

  • hz:用于设置定时器事件的执行频率,默认值为10,表示每秒钟执行10次。
  • maxmemory:用于设置Redis的最大内存限制。当内存超过这个限制时,Redis会触发淘汰策略来释放内存。
  • maxmemory-policy:用于设置淘汰策略。可以选择LRU、LFU、Random等策略。

优点:

定期删除策略以后台任务的方式执行删除操作,不会阻塞主线程的请求处理过程,这样可以保持较低的请求延迟,提供快速的响应。

 

缺点

定时删除策略的缺点是,它对CPU时间是最不友好的:在过期键比较多的情况看下,删除过期键这一行为可能会占用相当一部分CPU时间。

在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。

 

2)惰性删除策略

当客户端请求一个已经过期的键时,Redis会检测到该键已过期,并立即将其删除,这种策略称为惰性删除策略,它能够最大限度地减少内存的使用。

Redis的惰性删除策略(Lazy Expire)是一种与定期删除策略相对应的删除机制。

与定期删除策略不同,惰性删除策略是在访问键时检查其是否过期,并在需要时立即删除过期键。

惰性删除策略的优点:

惰性删除策略对CPU时间来说是最友好的:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,这个策略不会在删除其他无关的过期键上花费任何CPU时间。

惰性删除策略的缺点:

  1. 内存占用:惰性删除策略可能导致过期键在一段时间内仍然保留在内存中,占用一定的内存空间。这是因为过期键只在访问时才会被删除,如果过期键很少被访问,那么它们可能会一直存在于内存中,占用着宝贵的内存资源。
  2. 内存压力:在大规模的数据集中,如果存在大量的过期键,并且这些过期键被频繁访问,惰性删除策略可能增加CPU负载和内存压力。每次访问都需要进行过期检查和删除操作,这可能会占用大量的计算资源,并导致性能下降。
  3. 不确定的删除时间:由于惰性删除策略依赖于键的访问情况来触发删除操作,所以无法确定过期键的确切删除时间。过期键可能会在访问之前持续一段时间,这可能导致数据在过期后仍然可见,直到下一次访问时才会被删除。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获知最新一线技术干货!

评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!