缓存穿透

简介

key对应的数据在数据库和缓存中都不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,所以当有特别多key不存在的请求到来时,会直接访问数据库,数据库扛不住压力,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。

解决办法:

1.使用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在你return就好了,存在你就去查了DB刷新KV再return。从而避免了对底层存储系统的查询压力。

2.还有一个更为简单粗暴的方法,如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

3.参数做校验,不合法的请求直接过滤掉。

4.还可以使用nginx,或者拦截器,讲恶意ip直接拉黑。

缓存击穿

简介

key对应的数据是个热点数据,每秒都有大量的请求访问他,但在redis中过期时,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求会直接到数据库,可能会瞬间把后端DB压垮,就像在一个完好无损的桶上凿开了一个洞。

解决办法

1.设置热点数据永远不过期。

2.加互斥锁(mutex key)

比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。

SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果。

缓存雪崩

简介

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,大量的请求来请求这些失效的数据,会直接访问数据库,会给后端系统(比如DB)带来很大压力。比如某商城首页的信息都在缓存中,晚上零点失效,而此时正好商城有一个秒杀活动,我们有大量的用户用户,都会请求首页数据,但是此时首页数据失效了,并发的大量请求会直接访问数据库,如果数据库扛不住压力,会直接挂掉。

同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,数据库如果挂掉,其他依赖此库的接口都会报错,如果没有雪崩处理机制,挂掉的不仅仅是秒杀这个模块。如果你重新,新的大量的请求还会把你数据库打挂掉。等你能重启的时候,用户早就睡觉去了,并且对你的产品失去了信心,失去了大量的用户。

解决办法

1.处理缓存雪崩简单,在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值就好了。这样就能避免同一时间大量的redis失效了。

setRedis(Key,value,time + Math.random() * 10000);

2. Redis是集群部署,将热点数据均匀分布在不同的Redis库中也能避免全部失效的问题

3.设置热点数据永远不过期,有更新操作就更新缓存

【redis】缓存击穿、雪崩、穿透相关推荐

  1. Redis缓存击穿,穿透,雪崩等问题

    雪崩(随机过期时间.永不过期). 穿透(表示恶意请求,在系统端判断是否符合规则,比如id<0,布隆过滤器). 击穿(查询加for update,永不过期) redis缓存穿透:查询一个数据库中不 ...

  2. Redis——缓存击穿、穿透、雪崩

    1.缓存穿透: (1)问题描述:key对应的数据并不存在,每次请求访问key时,缓存中查找不到,请求都会直接访问到数据库中去,请求量超出数据库时,便会导致数据库崩溃.如一个用户id不存在,数据库与缓存 ...

  3. Redis缓存击穿,缓存穿透,缓存雪崩,附解决方案

    前言 在日常的项目中,缓存的使用场景是比较多的.缓存是分布式系统中的重要组件,主要解决在高并发.大数据场景下,热点数据访问的性能问题,提高性能的数据快速访问.本文以Redis作为缓存时,针对常见的缓存 ...

  4. Redis 缓存击穿,缓存穿透,缓存雪崩原因+解决方案

    一.前言 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是 ...

  5. Redis常见面试题(缓存击穿、穿透、雪崩)

    Redis常见面试题(缓存击穿.穿透.雪崩) 击穿 场景: 一般由于redis中的数据到期,同时并发用户特别多,此时大量请求压到数据库上. 解决思路: 根据redis是单进程单实例的特性,当高流量进入 ...

  6. redis缓存的雪崩、击穿、穿透,淘汰策略,持久化

    1.redis缓存的雪崩.击穿.穿透,在实际中如何处理? 雪崩:缓存不存在,数据库存在,高并发,大量的key 原因:大量数据同时过期,Redis宕机 解决方案:给缓存数据的过期时间上加上小的随机数,避 ...

  7. 【redis】缓存预热雪崩穿透击穿

    [redis]缓存预热雪崩穿透击穿(上) 文章目录 [redis]缓存预热雪崩穿透击穿(上) 前言 一.面试题 二.缓存预热 三.缓存雪崩 发生原因 预防+解决 高可用: 多缓存结合: 人民币玩家 四 ...

  8. 谈谈redis缓存击穿透和缓存击穿的区别,雪崩效应

    谈谈redis缓存击穿透和缓存击穿的区别,雪崩效应 面试经历 在很长的一段时间里,我以为缓存击穿和缓存穿透是一个东西,直到最近去腾讯面试,面试官问我缓存击穿和穿透的区别:我回答它俩是一样的,面试官马上 ...

  9. 使用jedis连接redis-cluster模拟缓存击穿,穿透,雪崩场景

    上一篇演示了通过redis实现ID生成器,本篇模拟缓存击穿,穿透,雪崩的场景. package com.coderman.jedis.clusterdemo.hack;import com.coder ...

  10. Redis缓存击穿问题及解决思路

    Redis缓存击穿问题及解决思路 1. 什么是缓存击穿 2. 解决方案 2.1 使用锁来解决(互斥锁) 2.2 逻辑过期 2.3 进行对比 1. 什么是缓存击穿 缓存击穿也叫热点key问题,就是一个被 ...

最新文章

  1. binlog日志_MySQL三大日志binlog、redo log和undo log
  2. 上交所行情文件导入数据库
  3. [Leedcode][JAVA][第76题][最小覆盖子串]滑动窗口]
  4. 二.开发记录之派勤工控机远程使用和ubuntu和ROS环境配置
  5. 如何基于对话框的project基于改变BCG的
  6. 安卓fragment笔记
  7. 电机学(1) - 绪论
  8. Android -- proxy
  9. java网店系统_java网店系统JSPGOU
  10. 服务器XP系统打印机共享设置,WinXP系统网络打印机怎么设置?WinXP打印机共享设置方法...
  11. spring boot 2.0 配置logback日志
  12. 我的第一个小程序(Discuz! + 微信小程序)
  13. win7系统安装telnet服务器,Win7怎样安装telnet服务?
  14. 关于Linux系统之VM安装配置
  15. 蓝桥杯,我劝你不要参加的8个完美理由
  16. linux CentOS7安装VCS、Verdi、SCL
  17. 大学计算机信息技术教程2020版知识点,大学计算机信息技术教程习题集.doc
  18. 伦敦银实时走势图决胜关键
  19. 电源并联均流电路的几种最常见分析方法
  20. mySQL 错误 3167 - The 'INFORMATION_SCHEMA.GLOBAL_STATUS' feature is disabled; see the document

热门文章

  1. linux centos7 升级 make 4.0
  2. kali使用openvas
  3. CSDN博客转载攻略
  4. Linux内核--异常和中断的区别
  5. 利用Tencent(腾讯)SCF函数部署自动签到获得容量(天翼云盘)
  6. C 整数反转
  7. mysql update join 锁表_Mysql事务中Update是否会锁表?
  8. 做一个python的旅游系统_有了它,妈妈再也不担心我感冒了,Python使用迭代器进行天气预报...
  9. eclipse maven打包_Maven中的几个重要概念:lifecycle, phase 和 goal
  10. mysql configuration_MySQL Configuration 教程