栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis缓存击穿、缓存雪崩、缓存穿透、缓存预热

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis缓存击穿、缓存雪崩、缓存穿透、缓存预热

Redis 缓存穿透

缓存穿透是指针对Redis中没有,数据库中也没有的数据进行查询,这类查询会直接到达数据库, 当有大量这类请求时,有可能搞垮数据库,导致服务瘫痪。

解决方法一: 请求穿透Redis时,无论数据库查出什么结果,都会写到Redis里,如果是不存在数据,只需要设置一个较短的过期时间。这样针对同一个参数,就能够直接被Redis拦截。但在短时间内如果有大量的不同参数的穿透请求的话,会导致Redis占用内存快速上升。

解决方法二: 使用查询数据库之前,使用布隆过滤器检验参数是否有效,这是非常好的一种方式。

Redis 缓存击穿

缓存击穿是指Redis中没有,数据库中有的数据进行查询,而且这个key是一个热点的key,当这个热点key突然失效的时,会导致大量的查询请求打到数据库上。如果redis一开始就没有这个key,但突然有大量请求来访问这个key的话,也算时缓存击穿。

解决方法一: 让改热点key的缓存永远不过期,但解决不了冷门key突然被大量访问

解决方法二: 加载数据时使用互斥锁,可以通化Redis的Set NX 实现

Redis 缓存雪崩

缓存雪崩指的是大量缓存集中失效,导致请求全部打在数据库上。Redis服务器突然挂掉了也会导致大量key失效。如果突然出现大量请求访问不同的key,这些key不存在于Redis,但存在于数据库中时,也会导致缓存雪崩

解决方式一: 针对缓存集中大量失效的情况,缓存失效时间可以在一定时间范围内随机,避免集中过期

解决方式二: 针对Redis服务器突然挂掉导致的情况,可以依赖Redis的高可用方案,如Redis Sentinel 和 Redis Cluster

解决方式三: 针对大量不存在Redis中key的请求,可以使用缓存预热的方式或者是对数据库请求使用互斥锁进行控制,避免大量请求打到数据库中

Redis缓存预热

Redis启动时,不存储任何缓存,如果直接对外服务,可能会出现大量请求直接打到数据库的情况,容易导致数据库崩溃,这时候就需要提前加载数据到Redis中。但很明显,数据库中的数据量很大的时候,是不可能全部加载到Redis中的,所以需要能够对请求进行统计,根据统计数据分析哪些是热点key,在下次启动Redis时提前加载到内存中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号