首页 > 其他分享 >缓存击穿,缓存穿透,缓存雪崩

缓存击穿,缓存穿透,缓存雪崩

时间:2024-04-29 21:11:36浏览次数:19  
标签:缓存 过期 数据库 击穿 查询 雪崩 数据

缓存击穿:是指缓存中没有但是数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读取缓存没有读到数据,又同时去数据库中取数据,引起数据库压力瞬间增大,造成过大压力。和缓存雪崩不同的是,缓存击穿指并发查询同一条数据,缓存雪崩是不同数据都过期了,很多数据都查询不到,从而查询数据库。

解决方案:

1.设置热数据永不过期

2.使用互斥锁避免大量请求同时查询db

3.做好熔断、降级,防止系统崩溃

 

缓存穿透:是指缓存和数据库中都没有的数据,导致所有的请求全都落到数据库上,并且是高并发(有可能是攻击者),造成数据库短时间内承受大量请求而挂掉。

解决方案:

1.给接口层增加校验,如用户鉴权校验。拦截 id<=0

2. 将空数据放到缓存中,设置key-null,同时设置短的缓存时间(如30秒),这样可以防止攻击用户反复用一个id暴力攻击

3.采用布隆过滤器,将所有可能存在的数据哈希存到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

 

缓存雪崩:是指缓存同一时间大面积失效,后面数据查询时都查询数据库,数据查询的压力全部落到了数据库上,导致数据库短时间内承受大量的请求而down掉

解决方案:1.缓存数据的过期时间随机设置(或者加上一个随机值),防止同一时间出现大批数据过期的现象。

2.设置热数据永不过期。

3.如果并发量不是特别高。可以用队列或者锁

4.如果缓存数据库是分布式部署的,可以将热点的数据均匀的分布在不同的缓存数据库

 

标签:缓存,过期,数据库,击穿,查询,雪崩,数据
From: https://www.cnblogs.com/syhxx/p/18166656

相关文章

  • 小程序图片缓存策略(不改代码更换OSS图片)
    昨天,后端给我提了一个问题:他更换了CDN上的图片,但是他打开小程序来看,还是旧图片,他尝试过删除小程序,重新进,还是旧图片。我第一反应是:“你有没有清CDN缓存?“他说:”我在阿里云CDN控制台刷新缓存了,都两三天了,还是旧图片。”(后来我看过刷缓存记录,一天前刚刷的,他夸张了。。。)我说:“那......
  • Django32session登录验证操作33缓存操作34分页操作
    Django32session登录验证操作33缓存操作34分页操作 Django笔记三十二之session登录验证操作 合集-Django笔记(19) 1.Django笔记二十四之数据库函数之比较和转换函数2023-04-182.Django笔记二十五之数据库函数之日期函数2023-04-193.Django笔记二十六之数据库函数之......
  • yum安装mysql报错--您可以尝试添加 --skip-broken 选项来解决该问题 清除缓存命令
    yum安装mysql报错--您可以尝试添加--skip-broken选项来解决该问题    安装mysql时,如果安装报错,首先删除缓存,    1、清除缓存  yumcleancache    2、重新加载  yummakecache    3、重新安装  yuminstallmysql    此......
  • 微服务想缓存一些数据,不希望重复调用。java SoftReference软引用存储缓存
    背景:微服务我们要调用字典数据,但是很多都是要重复调用的,没有缓存,我为了设置一个应用的缓存,并且可以定时清理,更新 首先定义两个静态数据,。一个软连接缓存,一个定时清理线程privatestaticSoftReference<Map<String,Map<String,DictionaryVo>>>plmDicMapCache=newSoftR......
  • windows bilibili客户端缓存视频导出
    视频缓存地址:C:\Users\Administrator\Videos\bilibili\一串数字使用winhex把视频和音频前面的八个0删除使用ffmpeg合并视频和音频ffmpeg-i视频文件-i音频文件-codeccopy输出地址......
  • 清除SSL缓存的主要目的是确保系统使用最新的SSL证书信息,并解决与SSL证书相关的问题。
    通过以下方式实现:powershellCopyCode#清除SSL证书缓存Invoke-Expression-Command"certutil-urlcache*delete"这条命令将执行certutil-urlcache*delete命令,清除系统中的SSL证书缓存。请注意,您需要以管理员身份运行PowerShell才能执行此操作。命令行(CMD)批处......
  • redis系列02---缓存过期、穿透、击穿、雪崩
    一、缓存过期问题产生的原由:内存空间有限,给缓存设置过期时间,但有些键值运气比较好,每次都没有被我的随机算法选中,每次都能幸免于难,这可不行,这些长时间过期的数据一直霸占着不少的内存空间!解决方案:redis提供8种策略供应用程序选择,用于我遇到内存不足时该如何决策:*noeviction:返......
  • Redis缓存穿透,击穿和雪崩
    缓存穿透缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它。布隆过滤器主要是用于检索一个元素是否在......
  • 每天5分钟复习OpenStack(十三)存储缓存技术Bcache
    Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用SSD或NVME磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘。这样的好处是比较经济实惠。另一种则是全部采用SSD或NVME磁盘,其性能更好,但是其价格比较昂贵。在第一种形态中,我们能像中间件那样加上一层缓存层,从而实现给数......
  • 开启、关闭HDD读、写缓存状态
    sg3一、sg3查看缓存状态您可以使用sg_modes命令来查看SAS盘和SATA盘的缓存状态。例如,要查看/dev/sdb设备的缓存状态,您可以执行以下命令:sg_modes-p8,0/dev/sdb二、sg3关闭机械盘写缓存状态(仅适用于SAS盘)对于SAS盘,您可以按照以下步骤更改其读写缓存状态:1、编辑缓存状态......