首页 > 数据库 >Redis——缓存穿透、缓存击穿、缓存雪崩

Redis——缓存穿透、缓存击穿、缓存雪崩

时间:2023-04-12 20:57:15浏览次数:37  
标签:缓存 过期 Redis 查询 雪崩 过滤器 数据

一、缓存穿透

1、含义

缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。

2、解决方案

1)缓存空对象

就是当数据库中查不到数据的时候,我缓存一个空对象,然后给这个空对象的缓存设置一个过期时间,这样下次再查询该数据的时候,就可以直接从缓存中拿到,从而达到了减小数据库压力的目的。

但这种解决方式有两个缺点:(1)需要缓存层提供更多的内存空间来缓存这些空对象,当这种空对象很多的时候,就会浪费更多的内存;(2)会导致缓存层和存储层的数据不一致,即使在缓存空对象时给它设置了一个很短的过期时间,那也会导致这一段时间内的数据不一致问题。

2)使用布隆过滤器

简单地说就是在缓存前面加了一个过滤器,查询一个数据时布隆过滤器中存在才继续查询缓存,否则直接返回空值。

注意,布隆过滤器可能误判(不存在的肯定不存在,存在的也可能不存在)

布隆过滤器算法 参考文章

二、缓存击穿

1、含义

缓存击穿是指当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过缓存(并发高),直接查询数据库。

2、解决方案

1)使用分布式锁,保证同一时刻只能有一个查询请求重新加载热点数据到缓存中,这样,其他的线程只需等待该线程运行完毕,即可重新从Redis中获取数据

2)在后台同时启一个定时任务去定时地更新这个缓存。

 

三、缓存雪崩

1、含义

缓存雪崩是指当缓存中有大量的key在同一时刻过期,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。

2、解决方案

给Redis设置过期时间时额外添加一个随机时间,来打散key的过期时间

 

标签:缓存,过期,Redis,查询,雪崩,过滤器,数据
From: https://www.cnblogs.com/shog808/p/17311195.html

相关文章

  • Redis线程模型
    提到redis马上在我们脑海中会浮现出这样一些关键字:单线程、高性能、内存数据库、KV存储……这些关键字都从不同层面描述了redis的一些相关我发和技术选择。那么为什么redis具备这些特性以及是如何实现的,本文将进行一一分析。单线程redis的单线程是指redis的网络IO和KV读写是由单个......
  • Redis源码之ZipList压缩列表
    List(版本3.2之前)、Hash和SortedSet这三种数据类型,都可以使用压缩列表(ziplist)来保存数据。新版本Redis的quickList底层也是采用zipList支持,Redis版本更新频繁,本文不保证时效性。 一、ziplist结构ziplist是一个特殊双向链表,不像普通的链表使用前后指针关联在一起,它是存储......
  • Redis缓冲区溢出及解决方案
    缓冲区(buffer),是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。一、Redis缓冲区溢出影响在Redis中,主要有三个场景用到了缓冲区的概念。在客户端和服务器端之间进行通信时,用来暂存客户端发......
  • 记一次提取Shaft缓存
    引子aka,pixiv在境内没办法正常访问,于是有了一众第三方App能够实现直连pixiv的操作。通过绕过SNI审查的方式实现直连,其中我所提到的Shaft就是其中之一。ref:https://github.com/CeuiLiSA/Pixiv-Shaft/issues/243ref:https://github.com/CeuiLiSA/Pixiv-Shaft背景介绍有一台......
  • vue项目中发布新版本线上自动清缓存
    背景最近项目更新频繁,每次一更新客户都说还跟之前的一样。一查原因是因为客户没有清空浏览器的缓存。所以为了方便客户看到最新版本,开始调研再发布新版本后自动清理缓存。方案每次打包后的js和css都加上hash值后缀。当文件发生改变时,hash值也改变。这样就不会走缓存举个例子v......
  • Redis scan等命令的学习与研究
    Redisscan等命令的学习与研究摘要背景跟前几天说的一个问题类似.为了验证自己的设想,所以晚上继续写脚本进行了一轮次的验证.不过上次讨论时,打击好像都没听懂我说的所以这次准备从基础开始讲起.很多好东西在上来量之后可能会变成坏东西scan命令Redis在2.8之后......
  • web网站使用indexedDB缓存大数量案例
    前言及背景indexedDB是html5标准引入的web数据持久化方案之一,现代浏览器大多按照标准对其进行了实现,我在新的项目中用到它来作为持久化数据存储,由于最近在web端项目,每次web前端需要实时计算中间成果预计18G的中间过度数据,预计最终每次生成200M以上的结果数据,在此过程耗时30多......
  • 【Azure Redis 缓存】Azure Redis 4.0 被扫描到漏洞,如何修补呢?
    问题描述在安全级别要求高的公司中,任何系统都会进行安全扫描。比如Azure云上的Redis服务,也在扫描的范围中,最后发现Redis4.0存在以下漏洞:CVE-2019-10192:https://nvd.nist.gov/vuln/detail/CVE-2019-10192CVE-2019-10193:https://nvd.nist.gov/vuln/detail/CVE-2019-10193CVE-......
  • centos7安装redis
    centos7#安装yuminstallepel-releaseyumupdateyum install redis#命令serviceredisstopserviceredisstartserviceredisstatusserviceredisrestart#开机启动systemctlenableredis#禁用开机启动systemctldisableredis#配置密码vi/etc/redis.conf#查找requirepa......
  • redis-4,redis主从复制
    redis主从复制就是主从复制,master以写为主,slave以读为主读写分离容灾备份支持高并发,水平扩容配从库不配主库master如果配置了requirepass,需要密码登录,那么slave就要配置masterauth来设置校验密码,否则的话master会拒绝slave的访问请求主要命令inforeplication可以查看复......