Redis6.2常见问题
缓存穿透问题
什么是缓存穿透? 当用户请求的数据在缓存和数据库中都不存在时,该请求将略过缓存,直接命中数据库,进而增大数据库的压力. 这种看起来就像缓存被穿透了一样的现象被称为数据穿透,严重时可能会使数据库宕机. 导致缓存穿透的常见情况 *.后端的锅: set和get的key不一致. *.网络攻击: 恶意用户伪造不存在的key_id发起大量请求. |
方案1: 缓存空值,查询数据库中不存在的数据时为该数据缓存null值.
优缺点 | 解决方法 |
---|---|
(缺点) 消耗内存 | 将null值的存储时间设置的短一些,通常不超过5分钟. |
(缺点) 影响业务 | 向数据库添加数据时异步操作缓存 (缓存中有则进行过期处理或数据同步) |
(解决方案一) 缓存空值: 适合命中率要求不高,数据频繁变化实时性高的场景下使用.
(方案二) 设置白名单: 使用bitmaps类型定义一个白名单,名单id作为bitmaps的偏移量. 每次访问缓存时先在bitmap中进行检索,检索不到直接拦截该请求,禁止访问.
(方案三) 布隆过滤器: 可以有效缓解缓存穿透问题,但命中率不是很准确,可能产生漏判或误判,同时还会产生数据更新问题.
(方案四) 进行实时监控:
缓存击穿问题
何为缓存击穿? 缓存击穿是指缓存中的某一热点数据过期导致数据库压力瞬时增大的现象. (点击查看原理)
|
缓存中的某一热点数据过期导致数据库压力瞬时增大
缓存预热
适时调整
加锁