【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

优化 Redis 缓存:过期策略的最佳实践 (优化redis)

用户投稿2024-04-19热门资讯14
优化 Redis 缓存:过期策略的最佳实践概述Redis 是一款流行的键值存储,广泛应用于缓存、消息传递和数据结构等领域。过期策略是 Redis 中一项关键特性,可帮助管理缓存中的数据生命周期。本文将深入探讨 Redis 过期策略的最佳实践,帮助您优化缓存性能并最大限度提高数据有效性。过期策略类型Redis 提供了多种过期策略,每种策略都有其独特的优势和用例:逐出策略 (Eviction Policy):当缓存达到容量限制时,驱逐过期键。此策略简单且高效,但可能会导致数据在过期之前被移除。定期删除 (Periodic Deletion):定期扫描缓存并删除过期的键。此策略更准确,但可能会导致性能问题。惰性删除 (Lazy Deletion):仅在获取键时检查其过期状态并删除过期键。此策略最小化了开销,但可能会导致过期键在缓存中驻留更长时间。最佳实践选择合适的策略选择合适的过期策略取决于您的特定应用程序需求。对于对实时准确性要求较高的应用程序,定期删除可能是最佳选择。对于优先考虑性能的应用程序,惰性删除可能是更好的选择。设置合理的过期时间确定合适的过期时间至关重要。过期时间过短会导致数据过早失效,而过期时间过长会导致缓存中存在无效数据。考虑业务逻辑、数据更新频率和缓存容量等因素来设置合理的过期时间。使用 TTLRedis 的 TTL (生存时间) 命令可让您为键设置过期时间。这提供了一种方便且一致的方式来管理键的生命周期。您可以使用 EXPIRE 命令设置绝对过期时间,或使用 PEXPIRE 命令设置基于毫秒的过期时间。监控缓存命中率缓存命中率衡量从缓存中成功获取数据的请求百分比。低缓存命中率可能表明过期时间设置不当或缓存未充分利用。监控缓存命中率并根据需要调整过期策略。使用键空间通知键空间通知允许应用程序监听缓存中键的状态更改。您可以使用此功能在键过期时采取操作,例如将其从其他数据存储中删除。这有助于保持数据的一致性和完整性。其他注意事项考虑数据更新频率:对于频繁更新的数据,设置较短的过期时间以确保数据有效性。使用渐进式过期:对于大键,使用渐进式过期策略可以避免在过期时一次性加载大量数据。避免永久缓存:不要无限期地缓存数据,因为这会浪费资源并导致数据陈旧。测试和调整:实施过期策略后,测试您的应用程序并根据需要调整策略设置。结论Redis 过期策略对于优化缓存性能和保持数据有效性至关重要。通过遵循最佳实践,您可以选择合适的策略、设置合理的过期时间、监控缓存命中率并采取适当的措施来管理键的过期。通过仔细考虑这些因素,您可以充分利用 Redis 缓存,并确保您的应用程序高效可靠地运行。

Redis 过期策略 和 回收策略

惰性策略就是在客户端访问这个 key 的时候,redis 对 key 的过期时间进行检查,如果过期了就立即删除。 Redis 默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。 1.从过期字典中随机 20 个 key; 2.删除这 20 个 key 中已经过期的 key; 3.如果过期的 key 比率超过 1/4,那就重复步骤 1; 同时,为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认不会超过 25ms。 从库不会进行过期扫描,从库对过期的处理是被动的。 主库在 key 到期时,会在 AOF 文件里增加一条 del 指令,同步到所有的从库,从库通过执行这条 del 指令来删除过期的 key。 因为指令同步是异步进行的,所以主库过期的 key 的 del 指令没有及时同步到从库的话,会出现主从数据的不一致 这是由 redis 的过期策略来决定。 redis 过期策略是: 定期删除+惰性删除 。 所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。 假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。 注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key,那样就是一场性能上的灾难。 实际上 redis 是每隔 100ms 随机抽取一些 key 来检查和删除的。 但是问题是,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,那咋整呢?所以就是惰性删除了。 这就是说,在你获取某个 key 的时候,redis 会检查一下 ,这个 key 如果设置了过期时间那么是否过期了?如果过期了此时就会删除,不会给你返回任何东西。 但是实际上这还是有问题的,如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,咋整? 答案是:走内存淘汰机制。

Redis缓存过期机制

一、针对与设置了过期时间的key值 1.(主动)定期删除:定时随机的检查过期的key,如果过期则清理删除 (每秒检查的次数1-500)配置: hz 10 2.(被动)惰性删除:当客户端请求到一个已经过期的key时,redis会检查是否过期并删除 所以,虽然key过期了,但是没被清理的话,还是会占内存的。 二、内存淘汰管理机制Memory Management 当内存占满之后,redis提供缓存淘汰机制。 : maxmemory <bytes> * noeviction:旧缓存永不过期,新缓存设置不了,返回错误 * allkeys-lru:清除最少用的旧缓存,然后保存新的缓存(推荐使用) * allkeys-random:在所有的缓存中随机删除(不推荐) * volatile-lru:在那些设置了expire过期时间的缓存中,清除最少用的旧缓存,然后保存新的缓存 * volatile-random:在那些设置了expire过期时间的缓存中,随机删除缓存 * volatile-ttl:在那些设置了expire过期时间的缓存中,删除即将过期的

Redis过期删除策略和内存淘汰策略

Redis可以用使用 expire 指令设置过期时间,在Redis内部,每当我们设置一个键的过期时间时,Redis就会将该键带上过期时间存放到一个过期字典中。当我们查询一个键时,Redis便首先检查该键是否存在过期字典中,如果存在,那就获取其过期时间。然后将过期时间和当前系统时间进行比对,比系统时间大,那就没有过期;反之判定该键过期。

那对于过期数据,一般有三种方式进行处理:

Redis的过期删除策略: 惰性删除 和 定期删除 两种策略配合使用。

spring-boot-starter-data-redis 包中提供了监听过期的类,对于key过期,需要得到通知,做业务处理的,可以做此监听。

springboot整合Redis参考, SpringBoot整合Redis -() 在整合Redis的基础上,在新加监听配置

监听配置类

监听类

将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。

Redis中有6种淘汰策略:

优化 Redis 缓存:过期策略的最佳实践 (优化redis) 第1张

文件中配置策略,有2个地方:

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

优化 Redis 缓存:过期策略的最佳实践 (优化redis) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!