缓存穿透优化
2017-07-07 07:48
246 查看
一、缓存穿透概述
为了提高响应时间,服务架构上,在db存储层上,通常会有缓存层。
缓存穿透是指:
1.缓存不命中
2.存储层不命中,不将空结果写缓存
3.返回空结果
缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去缓存保护后端的意义。
二、缓存穿透原因
1.自身业务代码或者数据出现问题
2.恶意攻击造成的
三、解决方案
1.缓存空对象
不命中后,把改key的value置为空,缓存下来
问题:
(1)这种方式如果恶意攻击的话,会大量快速消耗内存,导致更严重的问题。
所以需要对value是空的key,设置一个过期时间。
(2)设置空对象,有可能造成短时间的数据不一致性,比如存储层新加了一个用户的数据,
这时需要使用消息队列或者别的方式,主动更新下缓存。
2.使用布隆过滤器
就是在缓存层前面加一个布隆过滤器实现的。
比如推荐系统,维护一个用户组成的布隆过滤器。
有点是使用的内存小,缺点是增加代码开发维护难度。
开源社区上有很多实现方案,比如redis的bitmap数据结构就可以实现。
为了提高响应时间,服务架构上,在db存储层上,通常会有缓存层。
缓存穿透是指:
1.缓存不命中
2.存储层不命中,不将空结果写缓存
3.返回空结果
缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去缓存保护后端的意义。
二、缓存穿透原因
1.自身业务代码或者数据出现问题
2.恶意攻击造成的
三、解决方案
1.缓存空对象
不命中后,把改key的value置为空,缓存下来
问题:
(1)这种方式如果恶意攻击的话,会大量快速消耗内存,导致更严重的问题。
所以需要对value是空的key,设置一个过期时间。
(2)设置空对象,有可能造成短时间的数据不一致性,比如存储层新加了一个用户的数据,
这时需要使用消息队列或者别的方式,主动更新下缓存。
2.使用布隆过滤器
就是在缓存层前面加一个布隆过滤器实现的。
比如推荐系统,维护一个用户组成的布隆过滤器。
有点是使用的内存小,缺点是增加代码开发维护难度。
开源社区上有很多实现方案,比如redis的bitmap数据结构就可以实现。
相关文章推荐
- 缓存穿透与缓存雪崩
- [置顶] 小白的web优化之路 二、实战使用redis来缓存列表信息
- ASP.NET性能优化之构建自定义文件缓存
- ASP.NET MVC 3 网站优化总结(四)使用缓存
- 缓存穿透
- android平板上的GridView视图缓存优化
- ASP.NET性能优化之让浏览器缓存动态网页
- 优化你的DiscuzNT3.0,让它跑起来(5)缓存和高cpu
- ASP.Net性能优化——页面输出缓存
- 缓存穿透与缓存雪崩
- MySQL 数据库性能优化之缓存参数优化
- 缓存系统MemCached的Java客户端优化历程
- 如何利用客户端缓存对网站进行优化?
- JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题
- spark性能优化----缓存清除
- Memcached之缓存雪崩,缓存穿透,缓存预热,缓存算法(7)
- 缓存穿透与缓存雪崩
- 如何应对热key缓存构建以及如何避免缓存穿透
- http 304优化,了解客户端缓存
- Memcached之缓存雪崩,缓存穿透,缓存预热,缓存算法