文章目录
- 1.什么是缓存(Cache)
- 重复数据请求
- 2.缓存更新策略(三种)
- 主动更新策略
- 3.什么是缓存穿透
- 概念
- 解决
- 4.什么是缓存雪崩
- 概念:
- 解决
- 5.什么是缓存击穿问题
- 概念
- 解决
- 1.互斥锁
- 2.逻辑过期
- 方案对比
1.什么是缓存(Cache)
缓存是一种用于临时存储数据的技术,数据交换的缓冲区,一般读写性能较高
作用:提高读写效率,降低响应时间
成本:数据一致性成本、代码维护成本、运维成本
重复数据请求
- 当相同的数据被多次请求时,可以将结果缓存起来,避免重复计算或查询数据库。
- 例如:Web 应用中,频繁访问的数据库查询结果可以缓存到内存中。
2.缓存更新策略(三种)
主动更新策略
线程安全问题(数据不一致)
选用方案二:先操作数据库在删除缓存,线程2是数据库操作,一般比redis慢,所以线程1速度快,能让线程2挤进去的概率极小
3.什么是缓存穿透
概念
用户请求的数据在缓存和数据库中都不存在,不断发起这样的请求会给数据库带来压力
解决
缓存null对象,
缺点:1.会带来额外的内存消耗,请求没有的数据都会在缓存添加null值,占用内存,在加一个超时剔除,解决占用大量内存的问题
2.短期的数据不一致,比如查询一条数据,缓存没有,数据库没有,写入缓存就是null,此时,插入了一条数据,但是缓存里面有就会查缓存的旧数据,解决添加缓存的存在时间TTL
布隆过滤
4.什么是缓存雪崩
概念:
就是统一时间段大量的缓存key同时失效或者redis服务宕机了,导致大量请求到达数据库,带来巨大压力
解决
给key的TTL添加随机值,不然缓存在同一个时间段内同时失效
5.什么是缓存击穿问题
概念
也叫热点key问题,就是一个高并发访问并且缓存重建业务较为复杂的key突然失效了,无数的请求访问会给数据库带来巨大的压力
解决
1.互斥锁
(没抢到锁的线程会一直等待,性能差)