redis(1)

redis
缓存穿透
1.什么是缓存穿透呢?

当客户端访问数据库一个不存在的数据时,数据库查询不到也不会添加在缓存中,所以客户端的每次访问都会去查数据库,这有可能会导致数据库垮掉。

2.解决方案

1.缓存空数据,即便查询的结果为空,任然将这个空的结果存放在缓存中。优点是简单方便,缺点是消耗内存,可能存在不一致问题。
2.布隆过滤器,主要是用于检索一个元素是否存在于一个集合中。它的原理是,首先初始化一个数组,数组中存放的是二进制0、1,最开始存放的都是0,当一个数值来时,该值进行三次hash计算,模与长度取余获取到三个数组下标,并将对应的数组0修改为1,这样三个数组下标就可以标明一个数值。虽然占用内容少了,但会存在一定的误判,但好在我们可以设置误判率,让它保持在5%以内。归根到底,误判是必然存在的,想要降低误判,需要加长数组的长度。这样其实已经很划算了,5%的误判率一般项目也可以接受,不至于高并发下压倒数据库。

什么是缓存击穿

对于设置过期时间的key,在一段时间后过期,恰好在这个时间点对于该key有大量的请求访问,这些请求发现key过期后会从数据库加载并同步到缓存,但大量的请求会瞬间压垮数据库。

解决方案

1.互斥锁
当缓存失效时,先不去数据库加载,先使用如redis的setnx设置一个互斥锁,当操作成功返回时加载数据库,同时同步缓存,否则重试get缓存的方法。
2.逻辑过期
在设置key的时候同时设置一个过期时间字段一起放在缓存中,不给当前key设置过期时间,当查询时,从redis取出key并判断该key是否过期,若过期了,则开通一个新的线程去同步缓存,当前线程正常返回数据,不过这个数据不是最新的
3.总结
两种方法各有千秋,若是考虑数据的强一致性,可以考虑分布式锁,用锁了,当然性能就没那么高了,需要时间去等待,也有可能会造成死锁的状况。若是考虑性能,可以考虑逻辑过期,具有高可用性,不过数据同步这一块做不到强一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle与Java JDBC数据类型对照

Oracle Database JDBC开发人员指南和参考 SQL Data TypesJDBC Type CodesStandard Java TypesOracle Extension Java Types CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.Types.VARCHAR java.lang.String oracle.sql.CHAR LONG jav…

vue使用sm2对手机号邮箱等加签名,数据完整性

vue使用sm2对手机号邮箱等加签名,数据完整性 1、安装依赖 npm install --save sm-crypto2、在utils文件下新建sm2Util.js // sm2Util.js const SM2 require(sm-crypto).sm2; const publicKey woshigongyao // 公钥 const privateKey woshisiyao // 私钥/* * 加…

esp32UART串口外设(Arduino)

通用异步接收器/发送器 (UART) 介绍 通用异步接收器/发送器 (UART) 是一种硬件功能,它使用广泛采用的异步串行通信接口(如 RS232、RS422 和 RS485)处理通信(即时序要求和数据成帧&…

个人笔记:分布式大数据技术原理(二)构建在 Hadoop 框架之上的 Hive 与 Impala

大家想了解更多大数据相关内容请移驾我的课堂: 大数据相关课程 剖析及实践企业级大数据 数据架构规划设计 大厂架构师知识梳理:剖析及实践数据建模 有了 MapReduce,Tez 和 Spark 之后,程序员发现,MapReduce 的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编…

Vue-9、Vue事件修饰符

1、prevent 阻止默认事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件修饰符</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdeliv…

用html和css实现一个加载页面【究极简单】

要创建一个简单的加载页面&#xff0c;你可以使用 HTML 和 CSS 来设计。以下是一个基本的加载页面示例&#xff1a; HTML 文件 (index.html): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

Hive基础知识(五):Hive 配置 JDBC方式访问

1&#xff09;在 hive-site.xml 文件中添加如下配置信息 <!--指定 hiveserver2 连接的 host --> <property><name>hive.server2.thrift.bind.host</name><value>hadoop100</value> </property> <!--指定 hiveserver2 连接的端口号…

JavaScript中解锁Map和Set的力量

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更…

前端国际化之痛点(三):上线后修改翻译内容

前言 VoerkaI18n是一款非常优秀的前端国际化解决方案&#xff0c;其开发的出发点是为了解决现存多语言的一些痛点,接下来几篇文章将分别进行分析 前端国际化之痛点(一)&#xff1a;让人头疼的词条Key前端国际化之痛点(二)&#xff1a;多包多库场景下联动多语言前端国际化之痛…

深入浅出Go语言:匿名函数的原理和实践案例

深入浅出Go语言&#xff1a;匿名函数的原理和实践案例 引言匿名函数的基础实际应用案例一实际应用案例二性能考虑最佳实践与常见错误结语 引言 在Go语言的世界里&#xff0c;有一个功能强大且灵活的编程元素值得每位开发者深入了解——匿名函数。作为Go语言核心特性之一&#…

AI论文润色平台一览,让你的论文更加流畅易懂!

之前其实比较犹豫&#xff0c;是否应该整理一篇关于可辅助论文写作的在线平台的文章。因为论文这个事情&#xff0c;更重要的是要有个人的思考&#xff0c;要亲自动手写&#xff0c;这涉及到诚信的问题。然而&#xff0c;通过AI直接生成的论文可能很难通过查重和AI检测&#xf…

计算机网路——延迟

1. 延迟 在数据传输过程中&#xff0c;从发射器到接收器&#xff0c;数据会遇到的不同类型的延迟。 1.1 延迟的种类 1.1.1 发射持续时间 这个时间段与数据的大小成正比&#xff0c;并且与网络的带宽成反比。也就是说&#xff0c;如果数据段很长或者网络带宽较小&#xff0c;那…

计算机二级WPS Office考试须知、如何备考、备考建议

本文从计算机二级考试须知、如何备考、备考建议以及考试的注意事项等方面进行讲述&#xff0c;认认真真看&#xff0c;对你受益匪浅。 一、计算机二级考试须知 2021年3月27日至29日将举办第60次全国计算机等级考试&#xff08;NCRE&#xff09;&#xff0c;从今年起&#xff0…

40-特殊运算符delete,new,.getDate,.setDate,运算符优先级

1.delete删除. 数组 // 可以删除数组元素&#xff0c;可以删除对象键值对// 删除数组的值&#xff0c;数组长度保持不变// 删掉的值变成emptyvar arr [1,2,3,4,5];delete arr[0];console.log(arr); 对象 var obj {"a":"aa","b":"bb&quo…

前端基础面试题

一、HTML 1.行内元素有哪些&#xff1f;块级元素有哪些&#xff1f; 空(void)元素有哪些&#xff1f; 行内元素&#xff1a;span、img、input... 块级元素&#xff1a;div、footer、header、section、p、h1...h6... 空元素&#xff1a;br、hr... 2.元素之间…

什么是云安全?如何保护云资源

云计算允许组织通过互联网按需向其客户、合作伙伴或员工提供关键业务应用程序、服务和资源。换句话说&#xff0c;不再需要物理维护资源。每当您通过 Internet 从计算机访问文件或服务时&#xff0c;您都是在访问云。 迁移到云可以帮助企业增强安全性、简化运营并降低成本。企…

理解接雨水算法

一、IDEA注释显示图片 在做题时&#xff0c;需要对照这图片&#xff0c;才能更好的梳理思路。 首先&#xff0c;注释里添加<img/>标签 之后&#xff0c;将鼠标光标放置在需要以阅读模式预览注释的地方&#xff0c;然后按快捷键CtrlAltQ即可 二、接雨水算法 先看接雨水…

C++经典程序

C有许多经典的程序示例&#xff0c;以下是其中一些简单但常见的例子&#xff0c;以帮助你更好地了解C语言的基本概念。 1. **Hello World程序:** cpp #include <iostream> int main() { std::cout << "Hello, World!" << std…

【SPDK】【NoF】使用SPDK部署NVMe over TCP

SPDK NVMe over Fabrics Target是一个用户空间应用程序&#xff0c;通过以太网&#xff0c;Infiniband或光纤通道等结构呈现块设备,SPDK目前支持RDMA和TCP传输。 本文将在已经编译好SPDK的基础上演示如何使用SPDK搭建NVMe over TCP&#xff0c;前提是您已经将一块NVMe硬盘挂载…

Python使用函数统计指定数字的个数

本题要求实现一个统计整数中指定数字的个数的简单函数。 CountDigit(number,digit )其中number是整数&#xff0c;digit为[1, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。 函数接口定义&#xff1a; 在这里描述函数接口。例如&#xff1a; CountDigit(n…