Redis-缓存穿透

缓存穿透:查询一个根本不存在的数据,缓存和数据库都不会命中,这样每次这类的查询都会透过缓存层查数据库,造成后端数据库压力增大。

如何解决:

1.缓存空对象

查询数据库后没有命中,仍然把空值存到缓存中,并且设置一个较短的时间如300s,这样再次访问就会从缓存层中读取到结果。

2.布隆过滤器

在缓存层之前,把存在的key用布隆过滤器保存起来,做第一层拦截,以保存缓存和存储层。

两种方案的对比,第一种更为常用,适用于数据频繁变化实时性高,而且代码实现容易,但是增了缓存空间。第二种过滤器,适用于相对固定的实时性低的场景,代码实现复杂,缓存空间占用小,各有利弊自己衡量。

本文分享自微信公众号 - 别明天就今天吧(gh_916f9a413d1e),作者:今天不晚

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于Mysql的"explain"工具

    当你运行一条sql执行很慢的时候,可以使用explain sql,"explain"相当于mysql中的优化器,可以很好的分析性能瓶颈。

    别明天就今天吧
  • Redis-高性能

    最近有一道常见的Redis面试题,Redis为什么那么快?下面我们来分析下"快"的原因。

    别明天就今天吧
  • 面试题-JAVA设计模式之单例模式的5种实现方式

    如果说Spring框架是乾坤大挪移,那么设计模式就是九阳神功,学会了九阳神功在学其他的武功就会非常容易,设计模式是解决复用性功能的一套经验方法,我们写代码的时候...

    别明天就今天吧
  • 面试前必须要知道的Redis面试题

    在前面学习我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以Redis需要对数据设置过期时间,并采用的是惰性删除+定期删除两种策略对过期键...

    Java3y
  • 面试前必须要知道的Redis面试题

    在前面学习我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以Redis需要对数据设置过期时间,并采用的是惰性删除+定期删除两种策略对过期键...

    Java团长
  • 缓存提升性能的关键性手段

    从代码说起 fn longRunningOperations(){ ... // 很耗时}let result = longRunningOperatio...

    小小许
  • 分布式系统关注点(18)——「缓存穿透」和「缓存雪崩」到底啥区别?

    有句话说得好,欲要使其毁灭,先要使其疯狂。当你沉浸在缓存所带来的系统tps飙升的喜悦中时,使你系统毁灭的种子也已经埋在其中。

    Zachary_ZF
  • 对Hibernate二级缓存理解

    缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

    葆宁
  • 分布式系统关注点——先写DB还是「缓存」?

    在前一篇《360°全方位解读「缓存」》中,我们聊了运用缓存的三种思路,以及在一个完整的系统中可以设立缓存的几个位置,并且分享了关于浏览器缓存、CDN缓存、网关(...

    Zachary_ZF
  • Cache缓存机制

    论,如何定义一个前端工程师。前天看了篇文章,作者把前端攻城狮称作是所有攻城狮角色中最具有也最需要‘工匠精神’的攻城狮。从最直观的角度来讲就是视觉方面,不仅要百分...

    前端博客 : alili.tech

扫码关注云+社区

领取腾讯云代金券