Redis 缓存常见问题处理

news/2024/11/16 21:52:58/文章来源:https://www.cnblogs.com/ljzy666/p/18200953

缓存穿透

缓存穿透是指客户端的请求数据在缓存和数据库中都不存在,这样缓存永远不会生效,这些请求都会到达数据库,从而导致数据库负载过高。
常见解决方案有两种:

  • 缓存空对象:实现简单、方便维护,是解决缓存穿透的首选方法,但会造成额外内存消耗,或短期的数据不一致
  • 布隆过滤:内存占用少,没有多余key,但实现复杂且有可能误判

缓存雪崩

缓存雪崩是指在同一时间段大量缓存 key 同时失效或 Redis 服务宕机,导致大量请求到达数据库,导致数据库负载过高。
常见解决方案如下:

  • 给不同的 key 的过期时间添加随机值
  • 利用 Redis 集群提高服务的可用性
  • 给缓存业务添加限流降级策略
  • 给业务添加多级缓存

缓存击穿

缓存击穿也叫热点 key 问题,就是一个被高并发访问并且缓存重建业务比较复杂的 key 突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
常见解决方案有以下两种:

互斥锁

image
给重建缓存的逻辑加上一个互斥锁,避免多个线程同时访问数据库,这种方法通常应用在一致性要求较高的场景。

逻辑过期

image
在缓存对象中维护一个过期时间的字段,当查询缓存时发现已过期则获取互斥锁(例如 Redis 中的 setnx)并开启一个新线程重建缓存数据并将释放互斥锁的逻辑放在新线程中,原线程返回过期数据。当在缓存重建时有其他线程访问缓存并发现数据过期时获取互斥锁失败则直接返回过期数据。这种方法通常应用在对可用性较高的场景。

总结

image

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

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

相关文章

[原]代码管理工具WeCode及其数据导出

1.WeCode简介SVN、Git等工具适合多人协作时代码管理。类似在线的Gist(http://gist.github.com),WeCode是适合个人离线代码片段管理。wecode是CodeHelp的升级版本,是专门为我们程序员设计的一款源代码管理软件。 它能方便的管理您在编程和学习中有用的源代码,减少经常到处查找…

go高并发之路——go语言如何解决并发问题

一、选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比GO快很多。现在工作中也还是有一些老项目在使用PHP,但…

线程安全使用 HashMap 的四种技巧

这篇文章,我们聊聊线程安全使用 HashMap 的四种技巧。1方法内部:每个线程使用单独的 HashMap 如下图,tomcat 接收到到请求后,依次调用控制器 Controller、服务层 Service 、数据库访问层的相关方法。 每次访问服务层方法 serviceMethod 时,都会在方法体内部创建一个单独的…

C - AtCoder Magics

C - AtCoder Magics https://atcoder.jp/contests/abc354/tasks/abc354_c思路 首先按照a属性对数列进行排序,大的在前,小的在后, 完成后, 则数列在a参数上是非递增的。 如下图中x轴对应 a 参数, y轴对应c参数, discard条件,实际上是找出 数列 对于c参数 沿着 a 参数非递…

『手撕Vue-CLI』添加自定义指令

前言 经上篇『手撕Vue-CLI』添加帮助和版本号的介绍之后,已经可以在控制台中输入 nue --help 来查看帮助信息了,但是在帮助信息中只有 --version,--help 这两个指令,而 vue-cli 中还有很多指令,例如 create,serve,build 等等,所以本章将继续添加自定义指令,例如 creat…

Web入门

SQL注入 数据库基础 *关系型数据库: #Access#MSSQL -- 1433*非关系型数据库: #MySQL -- 3306#Oracle -- 1521等对MySQL数据库的操作 1.显示数据库 show databases;2.显示数据库版本 select version(); 3.使用数据库 use XXX;4.显示当前正在使用的数据库 selec…

Linux常用命令-文件目录命令

Linux常用命令-文件目录命令1.目录命令 1.1、ls命令:显示目录下的内容 基本格式 [root@localhost ~]# ls [选项] [参数是文件名或目录名]常用选项 -a:显示所有文件。 --color=when。支持颜色输出,when的值默认是always(总显示颜色),never(不显示颜色)和auto(自动)。 -d:显…

asdf

asf本文版权归作者和博客园共有,欢迎转载,转载请注明原文链接:https://www.cnblogs.com/lllliuxiaoxia/p/18200863另外欢迎关注公众号,一起讨论学习

啊手动阀手动阀

阿斯顿发射点发射点发生发射点发撒打发本文来自博客园,作者:胖树,转载请注明原文链接:https://www.cnblogs.com/lllliuxiaoxia/p/18200857关注我的公众号不定期推送资讯

配置SQLServer远程连接

要在 SQL Server 上启用远程连接,需要执行以下步骤:1、确保 SQL Server 已启用远程连接:  登录到 SQL Server 所在的计算机上。  打开 SQL Server Management Studio (SSMS)。  使用 Windows 身份验证或 SQL Server 身份验证登录 SQL Server。  在左侧的对象资源管理…

uCTRL论文阅读笔记

uCTRL: Unbiased Contrastive Representation Learning via Alignment and Uniformity for Collaborative Filtering论文阅读笔记 这篇文章应该是关于无偏推荐的 Abstract ​ 由于协作过滤(CF)模型的隐式用户反馈偏向于流行的项目,CF模型倾向于产生带有流行偏差的推荐列表。…