合理地处理不需要的缓存

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【6月更文挑战第8天】本文介绍了管理缓存数据过期的重要性,以避免内存浪费和过时信息的使用。缓存系统通常允许设置默认过期策略或为每个对象指定绝对或滑动过期时间。缓存服务常使用LRU策略进行逐出,但过度使用可能导致内存超出异常。

1 简介

当缓存中的数据不再有用时,我们可能需要删除它们,否则过时的数据永久停留在缓存中将造成内存和计算资源的浪费。

mandala曼德罗符号.png

过期策略包括惰性删除、定期删除和内存淘汰,如LRU、LFU和随机淘汰。

服务端无法直接控制客户端缓存,可能导致过时信息的使用,尤其是当URI不变时。
正确的过期期限设置是平衡性能和数据新鲜度的关键,过短会频繁请求,过长则可能导致数据过时和缓存溢出。

2 管理缓存中的数据过期时间

在大多数情况下,缓存中保存的数据是原始数据存储中保存的数据的副本。原始数据存储中的数据在缓存后可能会更改,从而导致缓存的数据过时。许多缓存系统使您能够将缓存配置为使数据过期并缩短数据可能过期的时间段。

当缓存的数据过期时,它将从缓存中删除,应用程序必须从原始数据存储中检索数据(它可以将新提取的信息放回缓存中)。您可以在配置缓存时设置默认过期策略。

在许多缓存服务中,当您以编程方式将单个对象存储在缓存中时,还可以规定这些对象的过期期限。

某些缓存允许您将过期期限指定为绝对值,或指定为滑动值,如果项目未在指定时间内访问,则会导致从缓存中删除项目。此设置将覆盖任何缓存范围的过期策略,但仅适用于指定的对象。

3 缓存的过期策略

1 惰性删除(在查询key时才检测是否过期,缺点低频key不会被删除)

2 定期删除(每隔一段时间则随机删除一些过期key)

3 内存淘汰

已设置过期时间 volatile

            lru 最近最少使用
            lfu 总的最少使用
            random 随机淘汰算法
            ttl 生存时间淘汰

未设置过期时间 allkeys

              lru 所有key最近最少使用
            lfu 所有key最不经常使用
            random 所有key随机淘汰

某些缓存实现可能会提供其他逐出策略。有几种类型的逐出策略。其中包括:

最近使用的策略(预期不再需要数据)。
先进先出策略(首先逐出最旧的数据)。
基于触发事件(例如正在修改的数据)的显式删除策略。

使客户端缓存中的数据失效,客户端缓存中保存的数据通常被视为不在向客户端提供数据的服务的支持下。服务不能直接强制客户端在客户端缓存中添加或删除信息。

这意味着使用配置不佳的缓存的客户端可能会继续使用过时的信息。

例如,如果未正确实现缓存的过期策略,则当原始数据源中的信息发生更改时,客户端可能会使用本地缓存的过时信息。

如果生成通过 HTTP 连接提供数据的 Web 应用程序,则可以隐式强制 Web 客户端(如浏览器或 Web 代理)获取最新信息。

如果资源通过更改资源的 URI 进行更新,则可以执行此操作。Web 客户端通常使用资源的 URI 作为客户端缓存中的键。

因此,如果 URI 发生更改,Web 客户端将忽略资源的任何以前缓存的版本,而是提取新版本。

4 小结

请仔细考虑缓存及其包含的对象的过期期限。如果设置得太短,对象将过期太快,并且会降低使用缓存的好处。如果使时间段过长,则数据可能会过时。

如果允许数据长时间驻留,缓存也可能会填满。

在这种情况下,任何向缓存添加新项的请求都可能导致在称为逐出的过程中强制删除某些项。

缓存服务通常基于最近最少使用 (LRU) 逐出数据,但您通常可以替代此策略并防止逐出项目。

但是,如果采用此方法,则可能会超出缓存中的可用内存。尝试将项添加到缓存的应用程序将失败并出现异常。

目录
相关文章
|
存储 缓存 监控
中间件应用合理使用缓存和数据结构
【5月更文挑战第4天】中间件应用合理使用缓存和数据结构
211 3
中间件应用合理使用缓存和数据结构
|
缓存 自然语言处理 微服务
合理的使用缓存提升接口性能
合理的使用缓存提升接口性能
|
消息中间件 存储 缓存
缓存 Redis 在项目中合理使用经验总结
Redis 是一个开源的内存数据结构存储系统。 可以作为数据库、缓存和消息中间件使用。
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
16天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
100 1
Redis专题-实战篇二-商户查询缓存
|
5月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
726 0
|
16天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
5月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
191 32
|
5月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
109 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
|
7月前
|
缓存 NoSQL Java
Redis应用—8.相关的缓存框架
本文介绍了Ehcache和Guava Cache两个缓存框架及其使用方法,以及如何自定义缓存。主要内容包括:Ehcache缓存框架、Guava Cache缓存框架、自定义缓存。总结:Ehcache适合用作本地缓存或与Redis结合使用,Guava Cache则提供了更灵活的缓存管理和更高的并发性能。自定义缓存可以根据具体需求选择不同的数据结构和引用类型来实现特定的缓存策略。
397 16
Redis应用—8.相关的缓存框架