redis过期后是怎么处理的
-
Redis在处理过期键的时候,采用了惰性删除和定期删除两种方法。
惰性删除是指在访问一个已经过期的键时,Redis会先检查该键是否过期,如果过期则将该键删除。这种方法的优点是删除键的时机相对灵活,可以在需要使用这个键的时候再去删除,节省了删除键的开销。但缺点是会增加访问键的时候的判断逻辑,导致访问速度稍微变慢。
定期删除是指Redis每隔一段时间就会主动检查部分已过期的键并删除它们。Redis通过一个定时器来实现定期删除,每秒钟执行一次。Redis将所有设定了过期时间的键存储在一个有序集合中,称为过期字典。定时器每秒钟都会从过期字典中随机选取一部分键进行检查,删除过期的键。这样可以均摊删除的开销,避免一次性删除大量过期的键导致阻塞。
当一个键被删除时,Redis会向客户端发送一个键删除的事件通知。客户端可以通过订阅这个事件,来处理键被删除的逻辑。这样可以保证Redis中的数据与客户端中的数据一致。
需要注意的是,当Redis的内存超过限制时,它会优先删除已过期的键来释放空间,以保证新写入的数据可以正常存储。
总结起来,Redis在处理过期键时,采用了惰性删除和定期删除两种方法,并通过事件通知机制来保持数据一致性。
1年前 -
当Redis中的键过期后,Redis会根据一定的策略进行处理。下面是Redis处理过期键的方式:
-
定期删除:Redis会在服务器每次运行时,随机检查一些设置了过期时间的键,并删除已过期的键。这种方式是通过使用定时器来实现的,可以通过配置文件中的
hz参数来设置运行频率。 -
惰性删除:只有在访问一个键时,Redis才会检查该键是否过期,如果已过期,则在访问时将其删除。这种方式相对于定期删除来说,可以减少内存压力,但会导致过期的键在一段时间内一直存在于内存中。
-
客户端删除:当一个客户端在获取某个键的值时,如果发现该键已过期,则会将其删除。这样可以保证只有最后一个获取该键的客户端可以看到过期值。
-
外部事件:除了定期删除、惰性删除和客户端删除之外,Redis还可以通过外部事件来删除过期的键。比如,通过在键被访问时检查其是否过期,在键过期时触发一个事件并执行一些操作,比如通知其他节点删除该键。
-
同步删除:在Redis集群环境中,当一个键在某个节点上过期时,会通过主从复制机制将删除命令传播给其他节点,保证所有节点上的该键都被删除。
总的来说,Redis处理过期键的方式是通过定期删除、惰性删除、客户端删除、外部事件和同步删除等多种方式来保证过期键及时被删除,释放内存空间。这样可以有效地管理内存,并确保Redis的性能和稳定性。
1年前 -
-
Redis在处理过期键时采用了惰性删除和定期删除两种方式。
-
惰性删除(Lazy deletion):
当访问一个过期的键时,Redis会检测到该键已过期,并立即将它删除。这种方式可以确保内存被及时回收,但会造成访问过期键时的性能损耗。 -
定期删除(定时任务+过期键集合):
为了减轻惰性删除的性能损耗,Redis还引入了定期删除机制。Redis会创建一个定期删除任务,由服务器在后台执行。
具体过程如下:
a) Redis会定期(默认每秒执行10次)随机取出一些过期键,并检查它们是否过期;
b) 如果某个键已经过期,Redis会将其从数据库中删除,并释放相关的内存空间。这种定期删除方式在理论上可能存在某些键过期后较长时间才被删除的情况,但通过不同策略和配置参数可以进行优化。可以通过修改
hz配置参数来控制定期删除的频率。默认值为10,可根据实际需求进行调整。除了惰性删除和定期删除,Redis还可以通过设置键的过期时间来主动处理过期键,以及使用钩子函数来进行过期键的事件处理等等。
综上所述,Redis通过惰性删除和定期删除两种方式来处理过期键。惰性删除可及时回收内存,但会带来性能损耗;定期删除通过定时任务的方式批量删除过期键,可以减轻性能损耗。通过适当的配置可以优化Redis对过期键的处理。
1年前 -