首页 > 数据库 >redis缓存穿透、缓存雪崩、缓存击穿【项目总结】

redis缓存穿透、缓存雪崩、缓存击穿【项目总结】

时间:2022-12-13 16:00:13浏览次数:60  
标签:缓存 过期 redis 击穿 查询 穿透 雪崩 key

Redis项目总结--缓存穿透、缓存雪崩、缓存击穿

目录

一.缓存穿透

1.什么是缓存穿透

查询某个 Key 对应的数据,Redis 缓存中没有相应的数据,则直接到数据库中查询。数据库中也不存在要查询的数据,则数据库会返回空,而 Redis 也不会缓存这个空结果。这就造成每次通过这样的 Key 去查询数据都会直接到数据库中查询,Redis 不会缓存空结果。这就造成了缓存穿透的问题,给数据库带来压力。

2.缓存穿透解决方案

方案一:缓存空对象,对不存在的key也将空对象进行缓存,并设置过期时间。

  • 优点:实现简单,维护方便。
  • 缺点:额外的内存消耗,缓存了无用key。可能导致短期的不一致。

方案二:布隆过滤,布隆过滤器可以针对大数据量的、有规律的键值进行处理。一条记录是不是存在,本质上是一个 Bool 值,只需要使用 1bit 就可以存储。我们可以使用布隆过滤器将这种表示是、否等操作,压缩到一个数据结构中。用户查询时,先询问过滤器,存在则查询redis,不存在则直接返回。

  • 优点:内存占用少,没有多余key。
  • 缺点:实现复杂。存在误判可能。

3.流程

原本流程:

img1

使用方案一解决缓存穿透的流程:

img2

二.缓存雪崩

1.什么是缓存雪崩

同一段时间大量缓存key同时失效(同时到期)或redis宕机导致大量请求到达数据库,带来巨大压力。

2.解决方案

方案一:给不同的key的过期时间添加随机值,使不同key的过期时间分布在一个时间段之间。

方案二:利用redis集群提高服务可用性

方案三:给缓存业务添加降级限流策略

方案四:给业务添加多级缓存

三.缓存击穿

1.什么是缓存击穿

缓存击穿问题也叫热点key问题,就是一个被高并发访问且缓存重建业务又比较复杂的的key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击。

2.解决方案

方案一:互斥锁

加锁后只有第一个获取到锁的人才能继续去数据库查询,重建缓存,未获取锁的人不能执行该步骤,只能等待一会再次查询缓存。

img3

方案二:逻辑过期

热点key一般是参与秒杀活动的热门商品,可以将其设置为永不过期而给一个逻辑过期时间,事后手动删除,查询缓存发现逻辑过期时,第一个获取到锁的人去查询数据库,重建缓存,重置逻辑过期时间,其他人若再次期间访问则返回已过期的数据。

img4

标签:缓存,过期,redis,击穿,查询,穿透,雪崩,key
From: https://www.cnblogs.com/LoginX/p/Login_X62.html

相关文章

  • Spring Integration对Redis的支持
    SpringIntegration2.1引入了对Redis​的支持:“一个开源的高级键值存储”。这种支持以基于Redis以及发布-订阅消息传递适配器的形式出现,Redis通过其 PUBLISH、SUBSCRI......
  • redisson 延迟队列实现订单过期监听
    需求:     订单下单超过两个小时以后,如果还未支付,则自动转为取消支付状态实现:    1,创建延迟队列的监听任务RedisDelayedQueueListener,消费延迟队列 ......
  • 【前端】VUE路由缓存
    全部缓存<keep-alive>  <router-view></router-view></keep-alive>缓存单个指定路由<keep-aliveinclude="该路由的name名称">  <router-view></router-view></ke......
  • 解读JVM级别本地缓存Caffeine青出于蓝的要诀2 —— 弄清楚Caffeine的同步、异步回源方
    大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。上......
  • Redis 面试常见问答
    1.什么是缓存雪崩?怎么解决? 通常,我们会使用缓存用于缓冲对DB的冲击,如果缓存宕机,所有请求将直接打在DB,造成DB宕机——从而导致整个系统宕机。如何解决呢? 2种......
  • webpack学习笔记之优化缓存、合并、懒加载
    除了的webpack基本配置,还可以进一步添加配置,优化合并文件,加快编译速度。下面是生产环境配置文件webpack.production.js,与wenbpack.config.js相比其不需要一些dev-tools,dev......
  • Redis
    基本操作select[序号] 切换数据库,默认16个set[k][v] 添加数据mset[k1][v1][k2][v2] 添加多个数据get[k] 获取值set[k][v]EX[秒]/PX[毫秒] 设定过期时......
  • Redis中是如何实现分布式锁的?
    分布式锁常见的三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本地面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的。要......
  • Redis高可用全景一览
    前言前几天我在知乎看到一个问题:如何建立自己的知识体系和观点?^[1]^在一篇高赞回答中讲述了建立“外脑”是关键,文章观点认为:大脑是用来思考的,不是用来记忆的。我很认同......
  • redis集群:MASTER aborted replication with an error: NOAUTH Authentication require
    发现个问题:redis集群所在服务器,磁盘空间很快就被占满,使用 “du-sh*”查看每个文件夹的大小,发现redis集群三个从节点的日志文件占用空间很大。下面记录问题排查及解决办......