首页 > 其他分享 >再读缓存三剑客:穿透,雪崩,击穿

再读缓存三剑客:穿透,雪崩,击穿

时间:2024-12-20 16:52:36浏览次数:4  
标签:缓存 数据库 雪崩 key 过滤器 id 三剑客

1.缓存穿透

高并发场景下,大量结果为null的请求打入系统。这样会迅速消耗尽数据库连接数资源,最终导致数据库连接不可用

解决方法:

  1. 增加请求校验:如何请求的id如果是long,如果发过来的id不是long那就直接返回
  2. 布隆过滤器:检索一个元素是否在一个集合中,通过hash函数将一个元素映射成位阵列(bit array)的一个点。后续查询我们只需要看这个点是不是1,就知道集合中有没有这个元素了
    1. 如果使用布隆过滤器,我们需要考虑缓存预热,将所有待查询的id提前存入过滤器,后续每次添加数据也需要将新的id存入过滤器。
    2. 一般我们通过guava或者redisson实现
  3. 缓存空/null值:容易被故意增大redis压力,处理不好会有数据不一致的情况。使用这个方法时一定要给key设置一个短暂的过期时间

 

2.缓存雪崩

高并发场景下,大量key同时失效导致大量请求同时涌入数据库,迅速耗尽数据库连接数导致其不可用

解决方法:

  1. 对同一类型key设置不同的过期时间
  2. 缓存预热:通过定时任务定时的将数据库的数据同步到缓存中
  3. 加同步锁

 

3.缓存击穿

高并发场景下,热点key突然失效,大量热点key突然打入数据库,连接数耗尽不可用

解决方法

  1. 同步锁
  2. 热点key取消过期时间

 

分布式同步锁解决雪崩与击穿问题

——用redisson,后面再补了,现在懒得写了

标签:缓存,数据库,雪崩,key,过滤器,id,三剑客
From: https://www.cnblogs.com/kun1790051360/p/18619585

相关文章

  • Redis缓存中的 雪崩、穿透、击穿、热点和数据倾斜(详细例子)
    在使用Redis作为缓存时,了解一些常见问题是非常重要的,包括雪崩、穿透、击穿、热点和数据倾斜。以下是详细讲解及示例。1.缓存雪崩定义缓存雪崩是指在某一时刻,大量缓存数据同时过期,导致大量请求直接访问数据库,从而造成数据库的压力骤增,可能导致数据库崩溃。示例假设一个......
  • Linux如何安全地清理系统缓存
    理解/proc/sys/vm/drop_caches在Linux系统中,/proc/sys/vm/drop_caches是一个用于手动清理系统缓存的内核接口。它可以有以下三个值:1:清理页面缓存2:清理dentries和inodes3:清理页面缓存、dentries和inodes默认情况下,这个值是0,表示系统没有执行任何手动缓存清理操作。为......
  • 【nginx】nginx dns缓存踩坑记录
    项目背景世界是个巨大的草台班子。这周突然在某个群里看到有个接口URL不通了。人在工位坐,锅从天上来。登录服务器进行排查:接口通过nginx,直接正向代理到外部系统某个域名。这样配置的原因是业务区域不通公网,在隔离区部署的nginx上开正向代理,从而调通公网。登录服务器,......
  • GaussDB技术解读高性能——计划缓存计划技术
    GaussDB技术解读高性能——计划缓存计划技术数据库接收到SQL语句后通常要经过如下处理:词语法解析->优化重写->生成执行计划->执行,从开始解析到计划生成其实是一个比较耗时的过程,一个常用的思想就是将计划缓存下来,当执行到相似的SQL时,从而可以复用计划,跳过SQL语句生成执行计划的......
  • Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区
    Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区https://developer.aliyun.com/article/1470012Openresty(lua+nginx)-Guava-Redis做多级缓存2024-11-3015:38:24​https://www.aliyun.com/......
  • Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区
    Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区https://developer.aliyun.com/article/1470012Openresty(lua+nginx)-Guava-Redis做多级缓存2024-11-3015:38:24​https://www.aliyun.com/......
  • gradle 缓存转maven仓库
    //Top-levelbuildfilewhereyoucanaddconfigurationoptionscommontoallsub-projects/modules.importjava.io.FileInputStreamimportjava.security.MessageDigestimportjava.text.SimpleDateFormatimportjava.util.Dateplugins{id("com.android.ap......
  • ArkWeb页面预加载与缓存 - 提升用户体验
    ArkWeb页面预加载与缓存-提升用户体验简介在Web应用开发中,页面加载速度和流畅性直接影响用户体验。ArkWeb框架提供了强大的页面预加载和缓存功能,可以帮助开发者提升应用的响应速度和效率。本文将详细介绍如何在ArkWeb框架中实现页面预加载、资源预加载、设置缓存模式以及清除......
  • 鸿蒙+next+封装轻量级缓存工具PreferencesUtil
    鸿蒙next封装轻量级缓存工具PreferencesUtilimportpreferencesfrom'@ohos.data.preferences';importdataPreferencesfrom'@ohos.data.preferences';import{AppUtil}from'./AppUtil';typePreferencesValue=string/***preference......
  • SpringBoot如何实现缓存预热?
    在SpringBoot项目中实现缓存预热,主要有以下几种常用方案:1.使用启动监听事件实现缓存预热可以通过实现ApplicationListener接口来监听应用上下文初始化完成的事件,如ContextRefreshedEvent或ApplicationReadyEvent,在这些事件触发后执行数据加载到缓存的操作。例如:@Compone......