相关概念

  • 缓存击穿:指的是一些热点数据过期,由于热点数据存在并发量大的特性,所以短时间内对数据库的造成很大的冲击,导致系统瘫痪。常见于例如微博系统中明星结婚或出轨时微博瘫痪的情况。
  • 缓存雪崩:指的是大量数据或全部数据集中过期失效的情况,这种情况是由于大量数据设置了相同的过期时间而导致的。

使用缓存的流程

  • 缓存存在,命中缓存并返回
  • 缓存不存在,数据库存在,则查询数据库返回(缓存过期了 / 数据库新增数据未同步至缓存)(这种情况下,一定要给 Redis 加锁,否则会在短时间产生有大量的数据库访问,造成数据库瘫痪)
  • 缓存不存在,数据库也不存在,则返回空数据

缓存不存在,数据库也不存在,则返回空数据

  可能问题:如果持续查询不存在的数据,并发量大时同样会在短时间产生有大量的数据库访问,造成数据库瘫痪。

  解决方法 1:当数据库查询不到的时候,同样往缓存中插入一条记录,并设置过期时间。这样的方案对于正常的访问来讲是有效的。但是,如果某些用户研究了ID生成规律,恶意捏造大量不存在的 ID,同样会造成缓存击穿的问题。所以该方案存在一定安全性问题。

  • 如何在海量数据中(例如10亿无序、不定长、不重复)快速判断一个元素是否存在?
  • 使用布隆过滤器。如果布隆过滤器判断元素在集合中存在,不一定存在;如果布隆过滤器判断元素在集合中不存在,则一定不存在。可以把数据库里所有的 ID 存放于布隆过滤器中,先通过布隆过滤器判断元素是否存在,若在布隆过滤器判断元素不存在,则不需要进行缓存和数据库访问;若布隆过滤器判断元素存在,则再判断缓存是否存在,在缓存也不存在的情况下,再通过数据库查询结果并返回。布隆过滤器是加在缓存之前的一道屏障。

布隆过滤器 Java实现

Redis 缓存问题及解决方案的更多相关文章

  1. redis缓存穿透穿透解决方案-布隆过滤器

    redis缓存穿透穿透解决方案-布隆过滤器 我们先来看一段代码 cache_key = "id:1" cache_value = GetValueFromRedis(cache_k ...

  2. 高并发下redis缓存穿透问题解决方案

    一.使用场景 我们在日常的开发中,经常会遇到查询数据列表的问题,有些数据是不经常变化的,如果想做一下优化,在提高查询的速度的同时减轻数据库的压力,那么redis缓存绝对是一个好的解决方案. 二.需求 ...

  3. .NET基于Redis缓存实现单点登录SSO的解决方案[转]

    一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...

  4. .NET基于Redis缓存实现单点登录SSO的解决方案

    一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...

  5. Redis缓存穿透和缓存雪崩以及解决方案

    Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并 ...

  6. redis缓存存在的隐患及其解决方案

    redis缓存1.缓存穿透 1>.什么是缓存穿透? 业务系统需要查训的数据根本不存在,当业务系统查询时, 首先会在缓存中查训,由于缓存中不存在,然后在往数据 库中查,由于该数据在数据库中也不存在 ...

  7. Redis缓存雪崩、缓存穿透、热点Key解决方案和分析

    缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存 ...

  8. 【高并发简单解决方案】redis缓存队列+mysql 批量入库+php离线整合

    原文出处: 崔小拽 需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化 ...

  9. Redis缓存雪崩,缓存穿透,热点key解决方案和分析

    缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存 ...

随机推荐

  1. ACwing : 798. 差分矩阵

    不得不说之前的差分我真的是掌握的不好.. 一维差分确实简单一看就会,但是学会了之后却并不能灵活的运用. 而二维的差分我甚至还琢磨了很长时间 懒得画图所以没有图..对于二维差分的定义,百度百科是这么说的 ...

  2. UOJ#468. 【ZJOI2019】Minimax搜索 动态DP

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ468.html 前言 毒瘤题 题解 首先,将问题稍加转化,将"等于k"转化为"小于等于k&q ...

  3. 巧用DNSlog实现无回显注入【转载】

    原作者:afanti 原出处:https://www.cnblogs.com/afanti/p/8047530.html 0x00 简介 测试一些网站的时候,一些注入都是无回显的,我们可以写脚本来进行 ...

  4. 浅谈python闭包及装饰器

    1. 什么是闭包: 闭包 是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变 ...

  5. 使用Xpose突破安卓App禁止截屏限制

    WindowManager.LayoutParams.FLAG_SECURE标志的app,这里需要注意下支付宝.网上银行类的app不建议拦截,像支付宝里的付款码,商家拿到后,直接就能扣费,不需要用户这 ...

  6. Oracle中查询走索引的情况

    1.对返回的行无任何限定条件,即没有where子句 2.未对数据表与任何索引主列相对应的行限定条件例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用这个索引 ...

  7. 查看 ssh 攻击 和 攻击成功者

    查看攻击失败记录: grep "Failed password for invalid user admin" /var/log/auth.log 查看攻击成功的记录: grep ...

  8. 新一代互联网传输协议QUIC

    QUIC(Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验. Q ...

  9. Apache-dbutils 简介及事务处理

    一:commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化 ...

  10. Apache 使用ssl模块配置HTTPS(Centos7 httpd2.4.6)

    根据原文:http://blog.csdn.net/ithomer/article/details/50433363改编 Web服务器在默认情况下使用HTTP,这是一个纯文本的协议.正如其名称所暗示的 ...