微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Redis 常见问题-缓存穿透


问题描述:

* 针对 DB 中不存在的数据源,每次请求缓存和数据库都不存在

造成后果:

* 应用服务器压力变大

* Redis 命中率大幅度降低

* `数据库压力巨增甚至 down 掉`
* 该现象对于 Redis 无影响,奔溃的是数据库

造成原因:

* 频繁访问不存在数据

 

 

解决方案:

1. 空值缓存:查询数据库返回为 null 时也进行缓存,但一定设置很短的过期时间

2. 实时监控:对 Redis 命中率进行实时监控,当发现命中率极速降低时,人为排查访问对象和访问数据,和运维人员配合,可以设置黑名单限制服务

3. 设置访问白名单:使用 bitmaps 类型定义一个可以访问的名单,名单 id 作为 bitmaps 的偏移量,每次访问和 bitmap 里面的 id 进行比较,如果访问 id 不在 bitmaps 里面,进行拦截,不允许访问。

4. 布隆过滤器:它实际上是一个很长的二进制向量 (位图) 和一系列随机映射函数(哈希函数)。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐