酒店网站报价方案,营销助手下载app下载,wordpress 504错误,wordpress红包本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库#xff0c;也可以用作缓存系统。它支持多种数据结构…本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库也可以用作缓存系统。它支持多种数据结构包括字符串、列表、集合、哈希表、有序集合等。Redis的缓存功能主要通过将数据存储在内存中来提高读取速度并且可以定期将数据持久化到磁盘上以防止数据丢失。
Redis的缓存特点包括
高性能由于数据存储在内存中读写速度非常快。支持多种数据结构可以存储不同类型的数据包括字符串、列表、集合等。分布式可以部署在多台服务器上支持数据的分布式存储和访问。数据持久化可以将数据定期或实时地持久化到磁盘上以防止数据丢失。支持事务可以通过事务来保证多个操作的原子性。支持发布订阅模式可以实现消息的发布和订阅用于消息队列等场景。 虽然Redis给我们提供了非常方便的服务但是在使用Redis的时候也需要注意其中的一些问题包括缓存击穿、缓存穿透、缓存雪崩等问题这些问题可能会导致我们的服务不能提供正常的服务下面我们就详细说一下这些问题以及对应的解决方案。
缓存问题
缓存击穿
问题描述 缓存击穿Cache Breakdown 缓存击穿指的是针对某个热点数据的并发访问当某个数据在缓存中过期或者被删除时大量的并发请求同时访问该数据导致这些请求都直接访问数据库。这会导致数据库负载剧增严重影响系统性能。
解决方案 1、加锁更新在缓存失效时只允许一个线程去查询数据库其他线程等待结果即可。⽐如请求查询A发现缓存中没有对A这个key加锁同时去数据库查询数据写⼊缓存再返回给⽤户这样后⾯的请求就可以从缓存中拿到数据了。 2、预先加载热点数据在缓存失效前主动加载热点数据到缓存中避免缓存失效时的并发访问。
缓存穿透
问题描述 缓存穿透Cache Penetration 缓存穿透指的是查询一个不存在的数据由于缓存中没有该数据每次查询都直接访问数据库。这种情况可能是恶意攻击或者查询不存在的数据导致但无论原因如何都会导致数据库压力过大。
解决方案 1、缓存控制/默认值在数据库不命中之后把⼀个空对象或者默认值保存到缓存之后再访问这个数据就会从缓存中获取这样就保护了数据库。 2、布隆过滤器详细了解布隆过滤器请参考下面这篇博客https://wzill.blog.csdn.net/article/details/136021578
缓存雪崩
问题描述 缓存雪崩Cache Avalanche 缓存雪崩指的是在某个时间点大量缓存数据同时失效导致大量请求直接访问数据库导致数据库压力过大甚至宕机。这种情况可能是由于缓存数据的过期时间设置相近或者服务器宕机导致的。缓存雪崩是三⼤缓存问题⾥最严重的⼀种。
解决方案
提高缓存可用性
集群部署通过集群来提升缓存的可⽤性可以利⽤Redis本⾝的Redis Cluster或者第三⽅集群⽅案如Codis等多级缓存设置多级缓存第⼀级缓存失效的基础上访问⼆级缓存每⼀级缓存的失效时间都不同。
过期时间配置
均匀过期为了避免⼤量的缓存在同⼀时间过期可以把不同的 key 过期时间随机⽣成避免过期时间太过集中。热点数据永不过期。
熔断降级
服务熔断当缓存服务器宕机或超时响应时为了防⽌整个系统出现雪崩暂时停⽌业务服务访问缓存系统服务降级当出现⼤量缓存失效⽽且处在⾼并发⾼负荷的情况下在业务系统内部暂时舍弃对⼀些⾮核⼼的接⼜和数据的请求⽽直接返回⼀个提前准备好的 fallback退路错误处理信息。
总结提升 在实际应用中缓存击穿、缓存穿透和缓存雪崩是常见的缓存问题可以通过合理的缓存策略和技术手段来避免或者减轻这些问题带来的影响。 此文章对你有用的话记得留言点赞收藏哦