叫任何一个人一个小时做网站,企业微网站怎么做,青岛新城世纪网站建设公司,永乐网站建设上一篇地址#xff1a;持续总结中#xff01;2024年面试必问 20 道 Redis面试题#xff08;三#xff09;-CSDN博客
七、Redis过期键的删除策略#xff1f;
Redis 过期键的删除策略主要涉及以下几种方式#xff1a;
1. 定时删除#xff08;Timed Expiration#xff…上一篇地址持续总结中2024年面试必问 20 道 Redis面试题三-CSDN博客
七、Redis过期键的删除策略
Redis 过期键的删除策略主要涉及以下几种方式
1. 定时删除Timed Expiration
这是最直接的过期键删除策略。当为一个键设置过期时间后Redis 会在该键达到过期时间时立即将其删除。这种方式的优点是确保了数据的实时性过期数据能够立即被清理出去但缺点是可能会对性能产生影响因为每个带有过期时间的键都需要创建一个定时器来监控。
2. 惰性删除Lazy Expiration
在这种策略下键并不会在过期时立即被删除而是在下一次访问该键时才会被检查并删除。这种方式的优点是可以节省CPU资源因为它避免了定时器的开销。但是它可能会导致过期数据在内存中驻留较长时间从而占用内存空间。
3. 定期扫描删除Periodic Expiration
Redis 会定期扫描键空间以查找并删除过期的键。这种策略通过随机抽样的方式来减少对性能的影响但无法保证过期数据能够及时被删除。定期扫描可以配置不同的频率和条件以适应不同的性能和实时性需求。
4. 内存淘汰策略Eviction Policies
当内存不足时Redis 会根据配置的内存淘汰策略来决定哪些键应该被删除。这些策略包括但不限于
noeviction不删除任何数据如果内存不足写入操作将被拒绝。allkeys-lru从所有键中删除最近最少使用的键。allkeys-random从所有键中随机删除键。volatile-lru从设置了过期时间的键中删除最近最少使用的键。volatile-random从设置了过期时间的键中随机删除键。volatile-ttl删除即将过期的键。
5. 内存碎片整理Active Defragmentation
在 Redis 4.0 及以上版本中可以启用内存碎片整理功能。这个功能可以在后台异步地整理内存减少内存碎片从而提高内存的使用效率。虽然这个功能不直接删除过期键但它有助于提高内存的总体性能。
6. 使用 Redis 4.0 及以上版本的优化特性
Redis 4.0 引入了一些新特性比如 LAZY FREE可以在后台线程中异步地释放过期键占用的内存减少对主线程的影响。
7. 过期时间分散策略
为了避免大量键在同一时间过期导致的性能问题可以通过在设置的过期时间上增加一个随机偏移量使得过期时间分散在一段时间内从而避免删除操作的集中。
通过这些策略的组合使用Redis 能够在保证性能的同时有效地管理过期键的删除确保缓存数据的时效性和内存使用的效率。
八、Redis的回收策略淘汰策略
Redis 提供了多种数据淘汰策略用于在内存不足时从键空间中选择并移除数据。以下是 Redis 支持的主要淘汰策略
1. noeviction
此策略会阻止任何新写入操作如果内存限制达到尝试写入数据时会返回错误。这种策略不会淘汰任何现有的键。
2. allkeys-lru
这种策略会淘汰整个键空间中最久未被访问的键Least Recently Used。它适用于那些访问模式下旧数据很少被再次访问的场景。
3. allkeys-random
此策略会从所有键中随机选择并淘汰一个键。它是一种简单且公平的淘汰方式但可能不是最优化的。
4. volatile-lru
这种策略会淘汰那些设置了过期时间的键中最久未被访问的键。如果键空间中没有可淘汰的过期键Redis 将尝试使用 noeviction 策略。
5. volatile-random
此策略会从设置了过期时间的键中随机淘汰一个键。与 volatile-lru 类似如果没有过期键Redis 将使用 noeviction 策略。
6. volatile-ttl
这种策略会淘汰那些设置了过期时间的键中剩余生存时间Time To Live, TTL最短的键。如果没有过期键Redis 同样会使用 noeviction 策略。
7. allkeys-lfu
这种策略会淘汰整个键空间中最少使用的键Least Frequently Used。适用于那些访问模式下某些数据很少被访问的场景。
8. volatile-lfu
此策略会淘汰设置了过期时间的键中最少使用的键。如果没有过期键Redis 将使用 noeviction 策略。
配置淘汰策略
淘汰策略可以在 Redis 配置文件中设置通过 maxmemory-policy 配置项进行配置。例如
maxmemory-policy allkeys-lru
这行配置表示当 Redis 达到内存上限时将使用 LRU 策略淘汰数据。
考虑因素
在选择淘汰策略时需要考虑以下因素
数据访问模式不同的应用有不同的数据访问模式选择一个与访问模式相匹配的淘汰策略非常重要。数据时效性对于那些过期后不再需要的数据使用考虑 TTL 的淘汰策略可能更合适。内存限制了解系统的内存限制并根据可用内存选择合适的淘汰策略。业务需求不同的业务对数据的准确性和实时性有不同的需求需要根据业务需求选择淘汰策略。
总结
Redis 的淘汰策略提供了灵活的选择以适应不同的应用场景和业务需求。正确配置和使用这些策略可以帮助确保 Redis 在内存限制下依然能够高效稳定地运行。