redis的过期怎么扫描
-
Redis的过期键扫描是通过一种叫做惰性过期的机制来实现的。下面我将详细介绍Redis的过期键扫描过程。
Redis使用了一种定期删除和惰性删除相结合的策略来处理过期键。具体来说,每当Redis执行一个读写操作时,它都会检查一小部分的过期键,并删除其中已经过期的键。这样,Redis就能够在保持高效性能的同时,逐步地清除过期键。
惰性过期是指当使用者尝试获取一个已经过期的键时,Redis会先删除该过期键,然后返回空值给使用者。这样一来,只有在真正需要访问过期键时,Redis才会执行删除操作。
除了惰性过期以外,Redis还会定期地主动扫描部分过期键并进行删除。这个定期删除的时间间隔由配置文件中的参数决定,默认值为每秒钟执行10次。当定期删除执行时,Redis会随机选择一定数量的过期键进行删除。通过按时间片的方式分散删除过期键的工作,避免了长时间阻塞Redis的操作。
在Redis中,过期键的删除是基于惰性过期和定期删除两种策略相结合的机制。这种设计方式既保证了Redis的高效性能,又能够及时删除过期键,释放内存空间。
总的来说,Redis的过期键扫描通过惰性过期和定期删除两种机制相结合来实现。惰性过期是在使用者访问过期键时进行的删除操作,而定期删除则是定时随机删除一部分过期键。这样既保证了Redis的高效性能,又能够及时删除过期键,释放内存空间。
1年前 -
Redis通过使用定期删除和惰性删除两种方法来扫描过期的键。定期删除是指Redis周期性地检查过期键并删除它们。惰性删除是指当访问一个键时,Redis会检查键是否过期,如果过期则删除它。
以下是Redis过期键的扫描过程的详细说明:
-
定期删除:
Redis使用了一种称为Cron表达式的算法来控制定期删除的时间间隔。Cron表达式由6个字段组成,分别表示分钟、小时、日期、月份、星期几和年份。Redis配置文件中的hz参数决定了服务器的每秒钟运行多少次操作系统的定时器。默认情况下,hz设置为10,也就是Redis每秒执行10次定时器任务。Redis在每次执行定时器任务时遍历数据库中的所有键,检查它们是否过期,并删除过期键。定期删除是由主线程执行的。 -
惰性删除:
Redis在访问一个键时,会检查键是否过期。如果键过期,则Redis会立即删除它。这个过程称为惰性删除。惰性删除确保只有在需要访问一个键时,才会进行过期检查和删除操作。这样可以避免在定期删除时遍历整个数据库,从而提高性能。 -
定期删除和惰性删除的结合:
定期删除和惰性删除是结合在一起工作的。定期删除确保即使没有访问一个键,也会在一定时间内检查和删除过期键。而惰性删除则确保只有在需要访问键时才会进行过期检查和删除操作。这种结合的方式可以在保证性能的同时,保证了过期键的及时删除。 -
过期键的删除策略:
Redis使用了一种称为惰性删除策略的方式来删除过期键。惰性删除策略是指当访问一个键时,Redis会检查键是否过期,并删除过期键。这种策略确保了只有在需要访问键时,才会进行过期检查和删除操作,提高了性能。 -
过期键的删除算法:
Redis使用了一种称为近似过期算法的方式来删除过期键。近似过期算法是指当访问一个键时,Redis会检查键是否过期,并删除过期键。这种算法可以在保证性能的同时,避免了遍历整个数据库的开销。
总结来说,Redis通过定期删除和惰性删除两种方式来扫描过期键。定期删除是由主线程执行的,定期检查和删除过期键。惰性删除是在访问一个键时检查和删除过期键。通过结合定期删除和惰性删除,Redis保证了过期键的及时删除,并提高了性能。
1年前 -
-
Redis是一个常用的键值存储数据库,它支持设置键的过期时间。当键的过期时间到期之后,Redis会自动将该键删除。那么,Redis是如何扫描过期键并删除它们的呢?
Redis使用了一种称为惰性删除 + 定期删除(Lazy expiration + Expired key deletion)的策略来处理过期键的删除。具体来说,Redis通过以下两个步骤来扫描并删除过期键:
-
惰性删除(Lazy expiration):当客户端尝试访问一个已经过期的键时,Redis会立即将它删除。这意味着Redis只有在需要获取已经过期的键时才会删除它,而不是主动进行删除操作。这种策略的好处是能够尽量减少删除操作对性能的影响,因为它不需要额外的线程或定时器来执行删除操作。
-
定期删除(Expired key deletion):为了防止内存泄漏和节省存储空间,Redis会定期主动扫描一部分数据库中的键,删除已经过期的键。这个过程是通过使用一个称为过期键清理器(Expired keys cleaner)的后台线程来完成的。具体流程如下:
- Redis将数据库中一定数量的键分成若干个区域,并使用一个简单的算法来计算每个键所属的区域。
- 过期键清理器根据预设的扫描频率,每隔一段时间开始扫描一个区域中的一部分键。
- 对于每个扫描到的键,过期键清理器会检查它是否已经过期。如果过期,就将其删除;如果未过期,则继续扫描下一个键。
- 清理器扫描所有区域的所有键之后,会休眠一段时间,然后再次开始扫描,循环进行。
需要注意的是,Redis并没有确切的时间点来删除过期键。它通过惰性删除和定期删除这两个策略来实现对过期键的处理,保证了高性能和内存空间的有效利用。
值得一提的是,Redis 4.0版本引入了主动主动扫描过期键的功能,即CRON扫描。这个功能可以单独配置,通过后台线程进行真正的主动删除过期键操作,而不再依赖于惰性删除和定期删除。这样可以更加精确地控制过期键的删除,但相应地增加了一些性能和资源消耗。
总结起来,Redis的过期键扫描采用了惰性删除和定期删除两种策略,分别在键被访问时和后台线程扫描时进行删除。这样可以保证高性能的同时,有效地处理过期键,确保数据的一致性和内存的有效利用。
1年前 -