redis问题汇总
为什么用缓存?
- 1、满足项目高性能
- 每次查询mysql耗时太高,可以将数据处理好后,直接存入缓存数据库,减少响应时间
- 2、满足项目高并发
- 并发场景不是很多,可以简单说说
缓存带来那些负面影响?
- 缓存与数据库双写不一致
- 缓存穿透、雪崩
- 缓存并发竞争
介绍一下缓存击穿、雪崩、穿透?
-
缓存穿透
- 原因
- 查询一个根本不存在的数据,缓存层和持久层都不会命中,请求直接压到数据库,从而压夸数据库。
- 解决办法
- 对空值缓存
- 设置可访问的白名单
- 采用布隆过滤器
- 原因
-
缓存击穿
- 原因
- 缓存中没有但是数据库中有的数据,由于用户特别多,所有用户都去数据库中读取,导致数据库压力激增
- 解决办法
- 预先设置高频词,实时调整高频词汇,增加高频词汇的过期时长
- 使用分布式锁,一个线程去读库,其他的设置等待
- 原因
-
缓存雪崩
- 原因
- 大量缓存集中过期,查询数量巨大,引起数据库压力过大,甚至down机
- 解决办法
- 原因