合理地处理不需要的缓存

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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) 逐出数据,但您通常可以替代此策略并防止逐出项目。

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

目录
相关文章
|
7月前
|
存储 缓存 监控
中间件应用合理使用缓存和数据结构
【5月更文挑战第4天】中间件应用合理使用缓存和数据结构
103 3
中间件应用合理使用缓存和数据结构
|
缓存 自然语言处理 微服务
合理的使用缓存提升接口性能
合理的使用缓存提升接口性能
|
消息中间件 存储 缓存
缓存 Redis 在项目中合理使用经验总结
Redis 是一个开源的内存数据结构存储系统。 可以作为数据库、缓存和消息中间件使用。
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
103 1
|
4天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
118 85
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
80 6
|
1天前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
1月前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
1月前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
265 22