缓存穿透
通过一个key先查询redis,查不到,又去查询数据库,还查不到,从头穿到尾。
两种解决方案:
- 在前端做数据校验,校验这个数据是否符合要求
- 布隆过滤器(常用):布隆过滤器可以想象成一个二进制的数组文件,保存数据的时候将数据对应的hash值的下标的位置置为1
,1表示存在,0表示不存在,这样查询之前先判断该值是否一定不存在,为0时就返回。
redis雪崩
在某一时刻大量的数据同时失效,导致大量的请求打到数据库上。
两种解决方案:
- 避免缓存集中失效,在设置过期时间的时候在后面拼上一个随机值
- 互斥锁(mutex key),当用户来查缓存的时候发现没有数据就给他加上一个互斥锁,然后查询缓存没有就去查询数据库,查询之后写缓存,那么后面的用户过来查询缓存的时候就有数据了
redis击穿
大量的并发访问某一个数据,然后这个数据又刚好过期了,然后就会导致所有请求全部打到了数据库上
解决方案:互斥锁
redis双写不一致
指的是redis缓存中的数据和数据库中的数据不一致,通常是修改数据失败的场景
解决方案:
先删除缓存,在写入数据库,写入数据库成功后再写缓存