缓存基础
概述
缓存就是数据库交换的缓冲区(Cache),是存储数据的临时地方,一般读写性能较高
作用与成本
作用
- 降低后端负载
- 提高读写效率,降低响应时间
缓存成本 - 数据一致性成本
- 代码维护成本
- 运维成本
使用
数据一致性
思路(延时双删策略)
- 查询数据的时候,如果缓存未命中,则查询数据库,将数据写入缓存设置超时时间
- 修改数据时,先删除缓存,再修改数据库,再删除缓存。
章数据
缓存常见的问题
缓存穿透:
客户端请求的数据,在数据库和redis中都不存在,这样缓存永远都不会生效,请求最终都到了数据库上。
解决方案:
- 当在数据库查询的结果也不存在的时候,可以返回null值给redis,并且设置TTL
- 布隆过滤器
缓存击穿:
也叫热点key问题,一个被高并发访问且业务复杂的key突然失效了,无数的请求瞬间给数据库带来的巨大冲击
解决方案:
- 互斥锁思路
缓存雪崩
同一时间段内,大量的缓存key失效或者redis宕机,到时大量的请求到达数据库,带来巨大的压力。
解决方案
- 给key设置随机的TTL(有效时间)
- 集群方案防止宕机不可用
布隆过滤器
布隆过滤器是一种数据结构,底层是位数组,通过将集合中的元素多次hash得到的结果保存到布隆过滤器中。主要作用就是可以快速判断一个元素是否在集合里面,但是因为算法的原因,也有一定概率的错误。
开发的时候我们一般选择空值值方式。
概率误判