合理地处理不需要的缓存

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 【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) 逐出数据,但您通常可以替代此策略并防止逐出项目。

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

目录
相关文章
|
1月前
|
存储 缓存 监控
中间件应用合理使用缓存和数据结构
【5月更文挑战第4天】中间件应用合理使用缓存和数据结构
31 3
中间件应用合理使用缓存和数据结构
|
缓存 自然语言处理 微服务
合理的使用缓存提升接口性能
合理的使用缓存提升接口性能
|
消息中间件 存储 缓存
缓存 Redis 在项目中合理使用经验总结
Redis 是一个开源的内存数据结构存储系统。 可以作为数据库、缓存和消息中间件使用。
|
14天前
|
存储 缓存 NoSQL
Redis缓存的运用
缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请 求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
17 1
|
3天前
|
存储 缓存 NoSQL
redis缓存优化
采用获取一次缓存,如果为空的情况,获取分布式锁,让一个线程去重建缓存,另外的线程未获取到锁的情况,休眠短时间,然后再自旋获取缓存。
11 0
|
8天前
|
缓存 NoSQL Java
在 Spring Boot 应用中使用 Spring Cache 和 Redis 实现数据查询的缓存功能
在 Spring Boot 应用中使用 Spring Cache 和 Redis 实现数据查询的缓存功能
31 0
|
28天前
|
缓存 监控 NoSQL
redis 缓存穿透 击穿 雪崩 的原因及解决方法
redis 缓存穿透 击穿 雪崩 的原因及解决方法
|
17小时前
|
存储 缓存 NoSQL
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
6 1
|
4天前
|
存储 缓存 NoSQL
SpringBoot配置第三方专业缓存技术Redis
SpringBoot配置第三方专业缓存技术Redis
14 4
|
2天前
|
存储 缓存 NoSQL

热门文章

最新文章