缓存穿透 缓存击穿 缓存雪崩 数据一致性
缓存穿透
什么是缓存穿透:
在redis中,查询某数据时:
- 先查询缓存,不存在。
- 然后查询数据库,也不存在。
这样对于一个不存在的数据,每次查找时,都会去进行一次数据库的查询操作。这就是缓存穿透。
解决缓存穿透
缓存空对象
代码简单,效果不好。
在查询数据时,无论该数据是否存在,都加入到缓存,value以null填充。
缺点:
- 第一次查询一个不存在的数据时,也会查询数据库。
- redis中可能会有大量空数据。
布隆过滤器
代码复杂,效果好。
复杂原因:(维护麻烦)
- 添加数据,需要修改布隆过滤器,添加数据。
- 删除数据时,需要重新构造布隆过滤器,因为布隆过滤器不能删除数据。
布隆过滤器应用
布隆过滤器可以简单理解为java中的List(new ArrayList())
但是,不能提取(get),不能修改(modify),只有添加数据,和查询数据是否存在的功能。
布隆过滤器使用:
- put方法
- 判断数据是否存在(可能会判断失误)
创建时需要:
设定误判率(误判率不能为0),误判率越高,耗能低,越低,耗能越高。
设定预估数据量
布隆过滤器原理
实现布隆过滤器依赖于bit数组。
对存入的数据进行若干次不同的哈希(hash),每次哈希之后使用哈希值对数组长度取余,得到下标,然后将bit数组中的相应下标改为1。
判断某数据是否存在时,也进行一遍相同操作,然后去相应下标查看,是否为1,有一个下标为0时,就绝对不存在,其余情况可能存在。
由于bit长度固定,在加入很多数据时,会有很多的下标值都变为了1。这样就有可能某个不存在的数据hash之后,它的下标都被其他存在的数据修改过,所以是可能存在。
容错率修改就会改变hash的次数,和bit数组长度
其他条件相同时,hash次数越多,过滤器出现误判的概率越高(自己判断的)
布隆过滤器自写(未完成)
google框架自带的布隆过滤器使用jvm来创建。(服务器宕机会导致数据消失)
自写的布隆过滤器存放在redis中,数据在持久化范围内,不会消失
redis中,存放string的数据时,使用的就是bit数组,而且在数组越界时,会进行扩容操作。
布隆过滤器使用redis生成
创建位数组:
setbit <数组名称> <长度> 0
缓存击穿
热点数据在数据库中,但是不在内存中 。
在高并发情况下(同时有很多个操作读取这个热点数据)
会出现每个读取操作都无法读取到缓存中的数据(并发情况下,缓存中数据还来不及更新),从而去读取数据库中的数据。这样就容易造成数据库崩溃。
解决方法:
在数据库操作部分添加分布锁。这样能保证依次读取。在第一个读取完成之后,缓存中就会有数据了。(虽然会导致堵塞,但是避免了多次读取数据库)
缓存雪崩
雪崩情况:
- redis服务器挂了。
- 缓存中大部分数据失效(个别热点数据失效属于缓存击穿)
规避方法:
- 搭建redis高可用集群(cluster)
- 错开数据失效时间
雪崩解决方法: 降级 熔断
数据一致性
暂无/(ㄒAㄒ)/~
学习来源
这篇笔记是在观看b站上的redis教程时记录的,视频链接:
https://www.bilibili.com/video/BV1aa4y1v7XF?t=5&p=1
侵删。
缓存穿透 缓存击穿 缓存雪崩 数据一致性相关推荐
- Redis 缓存穿透、击穿、雪崩现象及解决方案
前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...
- Redis应用问题解决(缓存穿透、击穿、雪崩、分布式锁)
Redis应用问题解决(缓存穿透.击穿.雪崩.分布式锁) 缓存穿透 问题描述 当系统中引入redis缓存后,一个请求进来后,会先从redis缓存中查询,缓存有就直接返回,缓存中没有就去db中查询,db ...
- 缓存穿透、击穿、雪崩什么的傻傻分不清楚?看了这篇文后,我明白了
对于缓存,大家肯定都不陌生,不管是前端还是服务端开发,缓存几乎都是必不可少的优化方式之一.在实际生产环境中,缓存的使用规范也是一直备受重视的,如果使用的不好,很容易就遇到缓存击穿.雪崩等严重异常情景, ...
- 缓存穿透、击穿、雪崩
一.缓存穿透 缓存穿透是指缓存和数据库中均不存在目标数据,而用户不断发起请求,缓存也得不到更新,由此每次请求该数据都会到数据库.高并发量,就会对后端的 DB 系统造成很大压力.如查询 id 为&quo ...
- Redis缓存穿透、击穿、雪崩、概念及解决办法
在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低 一.缓存穿透 1.缓存穿透理解 缓 ...
- Redis 缓存穿透、击穿、雪崩 解决方法
目录 引言 一.缓存穿透 1. 缓存穿透的原理 2. 解决方法 2.1 布隆过滤器 2.2 缓存空对象 二.缓存击穿 1. 缓存击穿原理 2. 解决方法 2.1 设置热点数据永不过期 2.2 加互斥锁 ...
- Redis_缓存穿透、击穿、雪崩
查询步骤图解 1.缓存穿透 什么是缓存穿透: 查询请求一直向数据库查询,导致数据库压力过大,甚至奔溃 本质原因:查询的数据既不在缓存中,也不在数据库中 此时会出现:程 ...
- 牛逼,三句话搞懂 Redis 缓存穿透、击穿、雪崩!
前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩之间的区别,一直以来都挺困扰我的.特别是穿透和击穿,过一段时间就稀里糊涂的分不清了. 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三 ...
- Redis缓存穿透、击穿、雪崩、预热、更新、降级
Redis是高性能的分布式内存数据库,对于内存数据库经常会出现下面几种情况,也经常会出现在Redis面试题中:缓存穿透.缓存击穿.缓存雪崩.缓存预热.缓存更新.缓存降级.本篇分别介绍这些概念以及对应的 ...
- 图解Redis缓存穿透、击穿、雪崩(必须知道)
目录 一.缓存是什么? 二.缓存的作用和成本 1.缓存的作用: 2.缓存的成本: 三.缓存作用模型 1.根据id查询数据缓存流程 四.缓存更新策略 1.内存淘汰 2.超时剔除 3.主动更新 五.缓存穿 ...
最新文章
- C#验证子网掩码的正确性
- python argvparser_Python命令行参数argv和argparse该如何使用
- ORACLE EXPDP命令使用详细
- mapreduce运行模式
- ubuntu下gcc的安装与使用
- oracle rac维护命令,2015年oracle rac日常基本维护命令.doc
- 10问10答:你真的了解线程池吗?
- idea项目application.properties文件注释显示unicode编码
- python数据库实现注册函数_10.注册和登录功能实现(3)—— 注册数据写入数据库...
- 一款超级实用的SuperLayout
- Linux运维之ntpdate同步网络时间
- 数据整理—dplyr包(filter系列)
- linux配置vsftp红帽子,linux红帽子VSFTPD的配置.doc
- 电子商务中与客户沟通宝典
- composer安装fxp/composer-asset-plugin
- sikuli实现百度云批量离线下载
- SketchUp 2019 建筑透视剖面图教程
- 基于OTSU算法和基本粒子群优化算法的双阈值图像分割
- 服务器硬件与 Linux 初体验
- 2万元起步 大四学生炒房资产达500万元