Redis雪崩_redis落地方式

Redis雪崩_redis落地方式同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对产品失去了信心,什么垃圾产品。设置两个缓存,原始缓存和备用缓存,原始缓存失效时,访问备用缓存,备用缓存失效时间设置长点。设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。雪崩概念在某一个时间段,缓存集中过期失效。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

怎么发生的?

雪崩概念:在某一个时间段,缓存集中过期失效。

举例说明:

如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。 

Redis雪崩_redis落地方式

同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对产品失去了信心,什么垃圾产品。

如何去处理?

这边推荐两种方案:

第一种缓存过期时间加入随机值

设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。

<?php
 
$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 60);

//设置过期时间加上一个随机值
$redis->set('goods1', '商品', 60 + mt_rand(1, 60));
$redis->set('goods2', '商品', 60 + mt_rand(1, 60));

第二种双重缓存

设置两个缓存,原始缓存和备用缓存,原始缓存失效时,访问备用缓存,备用缓存失效时间设置长点。

//原始缓存
$redis->set('goods1', '商品', 60);
//设置备用缓存,失效时间设置长点
$redis->set('goods_beifen', '商品', 1800);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193804.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ios 该图显示其出现的相关问题定义UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:&#39;

    Ios 该图显示其出现的相关问题定义UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:&#39;

    2021年12月31日
  • npm卸载安装

    npm卸载安装npm安装卸载命令利用npm安装xxx模块到当前命令行所在目录:npminstallxxx利用npm安装全局模块xxx:npminstall-gxxx安装但不写入package.json:npminstallxxx安装并写入package.json的”dependencies”中:npminstallxxx–save安装并写入package.json的”d…

    2022年10月25日
  • ubuntu dock栏_ubuntu安装sudo命令

    ubuntu dock栏_ubuntu安装sudo命令点击打开链接苹果的MACOS里的dock任务栏让人印象深刻。Dock是苹果公司MacOSX操作系统,及其始祖NeXTSTEP和OPENSTEP操作系统中重要组成部分。在NewtonOS中也有dock概念的一些早期例子。现在在不同操作系统中有很多不同的dock程序。在ubuntu等linux系统中,现在已经可以非常方便的安装使用dock任务栏了,因为很多仿doc

    2022年9月11日
  • Linux 软件源设置

    Linux 软件源设置

    2022年1月25日
  • USB流量分析「建议收藏」

    USB流量分析「建议收藏」1.USB接口简介通过监听USB接口流量,可获取键盘击键,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等。2.题目wireshark打开数据包后发现为usb协议USB协议数据部分在LeftoverCaptureData域中,使用tshark命令将其单独提取出来tshark-rudn.pcapng-Tfields-eusb.capdata>us

    2022年6月4日
  • Python报错:OSError: cannot open resource

    Python报错:OSError: cannot open resourcePython报错:OSError:cannotopenresource今天借助Python第三方库写了一个简单的生成词云的编程,但在使用wordcloud生成词云过程中,出现了OSError:cannotopenresource错误,通过断点调试并查看了一些网上的解决方法找到了原因:字体属性font_path的设置与系统提供的字体不一致。在本地电脑没有所写的字体,或是字体名称后缀…

    2022年9月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号