Redis

缓存穿透

查询一个不存在的数据 可以使用布隆过滤器解决

布隆过滤器

使用redession实现 通过三次hash计算来把数据库的下标改成1 使误判率达到5%以下

缓存击穿

对于设置了过期时间的key 在某个时间点过期 正好有大量的并发请求 这个时候大量的并发请求发现缓存过期以后 一般从后端数据库大量加载数据设回缓存 大量请求可能会把数据库压垮

解决缓存击穿可以设置互斥锁或者逻辑过期

互斥锁

缓存失效的时候 不会立即去加载数据库的内容

先用Redis里边的setnx去设置一个互斥锁 当操作成功返回的时候再进行加载数据库并设置缓存

否则重试get缓存的方法

设置key逻辑过期

不设置过期时间 而是在存入key的时候设置一个过期字段 查询的时候从redis取出数据先判断字段是否过期 如果过期 开通另一个线程进行数据同步 当前线程正常返回数据但是这个数据也不是最新数据

选互斥锁还是逻辑过期解决

互斥锁适合强一致性

逻辑过期适合高可用性 性能高

缓存雪崩

设置缓存的时候采用了相同的过期时间 导致缓存在某一时刻同时失效请求全部转发到DB DB瞬时压力过大雪崩 缓存击穿时 击穿某一个key缓存 而缓存雪崩时多个key同时过期

解决缓存雪崩

在原有的设置缓存过期时间的基础上再加一个随机函数 这样每个key的过期时间重复率会降低 很难引发集体失效的情况了

相关推荐
都叫我大帅哥9 分钟前
Redis 的 HyperLogLog:用 12KB 数清银河系星星的魔法计数器
redis
TT哇1 小时前
【Java EE初阶】计算机是如何⼯作的
java·redis·java-ee
工一木子4 小时前
URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
前端·缓存
陌殇殇4 小时前
SpringBoot整合SpringCache缓存
spring boot·redis·缓存
晋阳十二夜6 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL7 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT8 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
AI、少年郎10 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄10 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear11 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化