缓存穿透优化
来源:互联网 发布:php抽象类和接口的区别 编辑:程序博客网 时间:2024/05/16 07:31
一、缓存穿透概述
为了提高响应时间,服务架构上,在db存储层上,通常会有缓存层。
缓存穿透是指:
1.缓存不命中
2.存储层不命中,不将空结果写缓存
3.返回空结果
缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去缓存保护后端的意义。
二、缓存穿透原因
1.自身业务代码或者数据出现问题
2.恶意攻击造成的
三、解决方案
1.缓存空对象
不命中后,把改key的value置为空,缓存下来
问题:
(1)这种方式如果恶意攻击的话,会大量快速消耗内存,导致更严重的问题。
所以需要对value是空的key,设置一个过期时间。
(2)设置空对象,有可能造成短时间的数据不一致性,比如存储层新加了一个用户的数据,
这时需要使用消息队列或者别的方式,主动更新下缓存。
2.使用布隆过滤器
就是在缓存层前面加一个布隆过滤器实现的。
比如推荐系统,维护一个用户组成的布隆过滤器。
有点是使用的内存小,缺点是增加代码开发维护难度。
开源社区上有很多实现方案,比如redis的bitmap数据结构就可以实现。
阅读全文
0 0
- 缓存穿透优化
- 缓存穿透
- 实验 缓存,缓存穿透
- 缓存穿透与雪崩
- 缓存穿透问题
- 关于缓存穿透
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存雪崩,缓存穿透解决方案
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存穿透与缓存雪崩
- 缓存雪崩,缓存穿透解决方案
- HTML+CSS编写静态网站-28 调整标题和导航
- 不破楼兰终不还
- ORACLE回收站机制介绍
- mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
- c++面试题
- 缓存穿透优化
- mvc.net分页查询案例——实体层(HouseModel.cs)
- mvc.net分页查询案例——业务逻辑层BLL(HouseBLL.cs)
- c++学习笔记-----qsort通用排序函数
- mvc.net分页查询案例——控制器(HomeController.cs)
- mvc.net分页查询案例——前台页面(Index.aspx)
- c++面试题
- c语言ftell和c++的tellg,返回读写偏移
- npm 常用命令详解