首页 > 其他分享 >缓存失效后三种解决方案

缓存失效后三种解决方案

时间:2023-04-14 23:39:59浏览次数:28  
标签:缓存 请求 过期 解决方案 数据库 Key 失效 读取数据

首先要知道使用缓存的逻辑:

1、先尝试从缓存中读取数据。

2、若缓存中没有数据或者数据过期,再从数据库中读取数据保存到缓存中。

3、最终把缓存数据返回给调用方。

这种逻辑唯一麻烦的地方是,当用户发来大量的并发请求时,它们会发现缓存中没有数据,那么所有请求会同时挤在第2步,此时如果这些请求全部从数据库读取数据,就会让数据库崩溃。

数据库的崩溃可以分为3种情况。

1、单一数据过期或者不存在,这种情况称为缓存击穿

缓存失效后三种解决方案_缓存

解决方案:第一个线程如果发现Key不存在,就先给Key加锁,再从数据库读取数据保存到缓存中,最后释放锁。如果其他线程正在读取同一个Key值,那么必须等到锁释放后才行。

2、数据大面积过期或者Redis宕机,这种情况称为缓存雪崩

缓存失效后三种解决方案_缓存_02

解决方案:设置缓存的过期时间为随机分布或设置永不过期即可。

3、一个恶意请求获取的Key不在数据库中,这种情况称为缓存穿透

缓存失效后三种解决方案_缓存_03

比如正常的商品ID是从100000到1000000(10万到100万之间的数值),那么恶意请求就可能会故意请求2000000以上的数据。这种情况如果不做处理,恶意请求每次进来时,肯定会发现缓存中没有值,那么每次都会查询数据库,虽然最终也没在数据库中找到商品,但是无疑给数据库增加了负担。

解决方案有两种:①在业务逻辑中直接校验,在数据库不被访问的前提下过滤掉不存在的Key。②针对恶意请求的Key存放一个空值在缓存中,防止恶意请求骚扰数据库。

上面这些逻辑都是在确保查询数据的请求已经过来后如何适当地处理,如果缓存数据找不到,再去数据库查询,最终是要占用服务器额外资源的。那么最理想的就是在用户请求过来之前把数据都缓存到Redis中。这就是缓存预热

其具体做法就是在深夜无人访问或访问量小的时候,将预热的数据保存到缓存中,这样流量大的时候,用户查询就无须再从数据库读取数据了,将大大减小数据读取压力。

标签:缓存,请求,过期,解决方案,数据库,Key,失效,读取数据
From: https://blog.51cto.com/key3feng/6191119

相关文章

  • 导入 Microsoft Dynamics 365 解决方案时发生 LocalizedNames 错误,元素 savedquery 的
    尝试在Dynamics365中导入解决方案时,会收到以下错误:“无法导入此解决方案包,因为它包含无效的XML。可以尝试使用架构验证错误中找到的信息手动编辑XML内容来修复文件,也可以联系解决方案提供商。错误代码8004801a。如果选择“技术详细信息”,则会看到以下消息以及其他......
  • Yunzai-BotQQ账号登录报错:token失效: [禁止登录]你当前使用的QQ版本过低,请前往QQ官网i
    token失效:[禁止登录]你当前使用的QQ版本过低解决方案写在前面:该问题是TX认为账号有被用作BOT的嫌疑,而阻止你登陆。但是由于是我们人类在登陆,用来卡BOT的验证码测试肯定可以通过,TX就用“版本过低”的问题来卡我们!!TX我***网上尝试了许多方法,包括对device.json大改特改,还说什么......
  • 华为云网站安全解决方案,助力企业安心稳步发展
    随着信息化新时代的来临,网络成为了人民社会生活中不可缺少的重要组成部分。小到吃饭、购物,大到水电缴纳、日常就医,网络已经深入到我们生活的方方面面,因此,它的安全也就显得尤为重要。 据统计,有超过75%的网络安全问题都发生在Web应用层上,他们可能会造成企业的域名被劫持、数据信息泄......
  • 优维可观测轴心产品大观:HyperInsight超融合持续可观测解决方案
    随着Kubernetes得到越来越广泛的采用,企业软件系统正在向复杂的云原生架构进行革命性转变。应用形式呈现有Web、APP、小程序等多种形式,访问的网络有4G、5G、Wi-Fi等。企业用云也从单一云时代,逐渐来到混合多云时代。在这些庞大复杂的多云环境中,各种模块、这种语言开发的应用程序或服......
  • B/S上传大型视频文件到服务器,解决方案
    ​ 最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时......
  • 雪花算法的详解及时间回拨解决方案
     ......
  • SpringCloud上传大型视频文件到服务器,解决方案
    ​文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦、缺乏交互、用户体验差。一、前端代码英国程序员RemySharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:    * iframe上传 * ajax上传......
  • ​华为云网站安全解决方案,多重防御保护企业数据安全
    身处互联网时代,网络和信息安全始终都是人们关注的话题,对于企业来说也是一样。以网站安全为例,如果企业网站在安全防护措施方面存在不足,那么就很容易遭受黑客的击,轻则导致网站无法正常访问,重则导致敏感信息泄露,严重影响企业的正常经营,让企业蒙受巨大损失。同时,保护网络安全还是企业需......
  • SpringMVC上传大型视频文件到服务器,解决方案
    ​PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此指......
  • JSP上传大型视频文件到服务器,解决方案
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式:post(get方式提交有大小限制,post没有)2.表单的enctype属性:必须设置为multipart/form-data.3.表单必须......