redis缓存击穿、雪崩、穿透及业务场景

2023-10-29

一、缓存击穿

1、概念

缓存击穿:由于并发查询同一热点数据而缓存的热点数据到时失效导致用户请求直接访问数据库,造成数据库压力过大。

2、业务场景

一款冷门商品突然爆火,原本redis中冷门商品数据设置了定时过期,爆火后大量请求同时去redis中访问该商品数据,恰巧该数据过期了,于是大量并发请求查询数据库,会导致数据库运行压力过大,从而影响其他业务。

3、解决方案

  1. 设置热门商品永不过期
  2. 使用双重检查锁,加锁排队,一次执行一条线程

二、缓存雪崩

1、概念

缓存雪崩:大量缓存数据同时间失效或者缓存服务器宕机,导致用户直接发起大量请求到数据库,数据库瞬间压力过大或宕机。

2、业务场景

redis中大量商品数据同时过期,大量用户直接向数据库请求查询商品信息,导致数据库运行压力过大或宕机。

3、解决方案

  1. 使用双重检查锁,加锁排队,设置随机过期时间
  2. 提前做好redis集群

三、缓存穿透

1、概念

缓存穿透:用户请求的数据既不存在缓存里,也不存在数据库里,导致每次请求都去查询数据库,从而数据库运行压力过大或宕机。

2、业务场景

攻击者伪造大量不存在的数据(比如:负数或者特别大的数),攻击数据库。

3、解决方案

  1. 参数校验
  2. 缓存空对象
  3. 布隆过滤器(黑名单、白名单)

四、redis的业务场景

  1. 缓存热点数据(经常会被查询,但是不经常被修改或者删除的数据)
  2. 限时的优惠活动信息、手机验证码
  3. 计数器(String)
  4. 分布式全局唯一id(String)
  5. 排行榜(SortedSet)
  6. 抽奖活动(set)
  7. 电商商品筛选(set)
  8. 构建队列系统(list)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis缓存击穿、雪崩、穿透及业务场景 的相关文章

  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • redis 阻塞直到 key 存在

    我是 Redis 新手 想知道是否有办法能够await get通过它的键来获取值 直到该键存在 最小代码 async def handler data await self fetch key async def fetch key ret
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • Redis发布/订阅:查看当前订阅了哪些频道

    我目前有兴趣查看我拥有的 Redis 发布 订阅应用程序中订阅了哪些频道 当客户端连接到我们的服务器时 我们将它们注册到如下所示的通道 user user id 这样做的原因是我希望能够看到谁 在线 目前 我在不知道客户端是否在线的情况下盲
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • 如何延长 django-redis 中的缓存 ttl(生存时间)?

    我正在使用 django 1 5 4 和 django redis 3 7 1 我想延长缓存的 ttl 生存时间 当我取回它时 这是示例代码 from django core cache import cache foo cache get
  • 如何使用redis发布/订阅

    目前我正在使用node js和redis来构建应用程序 我使用redis的原因是因为发布 订阅功能 该应用程序只是在用户进入用户或离开房间时通知经理 function publishMsg channel mssage redisClien
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • 没有适用于机器人的 Laravel 会话

    我在大型 Laravel 项目和 Redis 存储方面遇到问题 我们将会话存储在 Redis 中 我们已经有 28GB 的 RAM 然而 它的运行速度仍然相对较快 达到了极限 因为我们有来自搜索引擎机器人的大量点击 每天超过 250 000

随机推荐

  • [网络安全提高篇] 一一五.Powershell恶意代码检测 (3)Token关键词自动提取

    网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但我也试试 看看自己未来四年究竟能
  • ExecutorService 的理解和使用

    前言 我们之前使用线程的时候都是使用new Thread来进行线程的创建 但是这样会有一些问题 如 a 每次new Thread新建对象性能差 b 线程缺乏统一管理 可能无限制新建线程 相互之间竞争 及可能占用过多系统资源导致死机或oom
  • AIX学习笔记

    学习笔记 这是我看191redbook第三遍的时候做的手记 放在这里大家提提意见 Created by workaholic 第一部分 系统启动问题cfgmgr configures devices and optionally insta
  • 在线生成发射爱心!生成网站直接发给你的ta

    一个网站直接帮你生成带名字的发射爱心 还可以直接分享给朋友看 网站放在最下面了 自从上次发了动态爱心的制作代码后 很多群友都来问 如何改名字 如何改文件 手机上如何编辑 这让我思考一个问题 能不能直接做成一个网站 点进去之后输入名字 点一下
  • 一个驱动同时兼容mysql5.7和mysql8.0

    driver class name org mariadb jdbc Driver org mariadb jdbc mariadb java client 2 6 0 url jdbc mysql 127 0 0 1 3306 datab
  • 【开源数据下载全步骤】利用Pytorch下载开源数据到本地,以Speech Command为例

    背景 找开源数据来练练手 虽然可以直接通过pytorch或TensorFlow加载使用 但感觉太麻烦了 所以想直接下载到本地使用 上网直接搜数据集没有那种直接下载的链接 最后发现可以直接通过pytorch或是TensorFlow下载 下面以
  • QT开发之环境变量设置

    注 主要方便软件在生成出来以后不需要去qt安装文件夹里面复制那6个dll文件才能运行exe程序的问题 右击我的电脑 gt 属性 gt 高级系统设置 gt 高级选项卡 gt 环境变量按钮 gt Path 编辑此变量 在变量值的最后面添加 QT
  • 程序员如何找女友呢?说说我的经验

    找女朋友 本来在咱们技术人社区 不适合谈 因为这涉及个人选择和价值观的问题 恰逢最近 翟欣欣跟苏享茂事件的尾声 纯技术人员如何去找到另一半 又开始火了 不过 我个人觉得 还是可以提供一些程序员社交的建议 参加技术会议和活动 去参加一些与自己
  • C++ 包管理器

    C 包管理器 Vcpkg Vcpkg 可帮助您在 Windows Linux 和 MacOS 上管理 C 和 C 库 相关资料 Vcpkg 管理 C 和 C 库 vcpkg github conan Conan是分布式跨平台开源的C C 软
  • uniapp自定义导航栏与手机状态栏重叠问题

    HBuildX 创建的应用默认是沉浸式样式 去除自带的导航栏后 页面直通手机顶部状态栏 即页面与手机状态栏重叠问题 处理 配置mainfest json来关闭沉浸式 打开应用的manifest json文件 打开源码视图 如下代码所示 ap
  • mysql5.6安装教程

    1 下载 解压完成之后将其放到你喜欢的地址当中去 这里我默认放在了D盘 这是我的根目录 2 配置环境变量 我的电脑 gt 属性 gt 高级 gt 环境变量 gt 系统变量 选择PATH 在其后面添加 D mysql 5 6 49 winx6
  • C++图书馆管理系统(简单版)

    1 总体功能分析 实用的图书馆管理系统应该至少包括一下功能 1 上传 新进图书以及基本信息的输入 2 删除 旧图书以及基本信息的删除 3 显示 显示图书馆已有的所有图书 4 查找 查询要借阅的图书信息 5 借阅 实现用户办理借阅手续 6 归
  • 关于altium designer 中如何按1:1生成PDF文档的解决方案

    众所周知altium designer是一款集PCB绘制 FPGA设计 原理图设计仿真等与一体的软件 功能很是强大 而且一直在不断更新 深受广大电子爱好者的喜爱 今天我不说其他的 就说说PCB绘制之后产生PDF文件的问题 altium de
  • 几个不错的CRM软件(B/S版)

    http www go2oa com http preview sugarcrm com generate instance php Administrator login ID adminPassword ossuw User login
  • 少年,你渴望元编程的力量吗?——symbol

    元编程的概念有很多文章 通过操作更加底层的api做更多个性化的功能 一句话概括 就是用代码来写代码 一些时候 写各种下划线 前后缀 为了实现一个唯一值或者秘密的特殊辅助值 用来辅助业务逻辑或者说作为一个私有的东西 const onlyone
  • Unity LWRP 学习之 RenderFeature

    RenderFeature是一种扩展LWRP的方法 该方法还是实验版 实现管道的参数的定制 其好处就是不需要修改物体的Shader 比如要实现一个如下图的显示隐藏背后的轮廓的需求 通常是需要修改对应的Shader的 使用两个Pass进行绘制
  • Parasoft SOAtest更新至9.10.6版本,新增API测试创建的机器学习功能

    Parasoft SOAtest 是业内最全面的测试解决方案 有着和loadrunner同样强大的性能测试 压力测试 负载测试功能 其功能包括API测试 SOA测试 云测试 负载与性能测试 开发测试等等 可以帮助开发团队提供一个直观的界面确
  • Windows C++ 判断磁盘类型 判断目录所在磁盘类型 判断是否U盘路径

    include
  • 用Linux搭建web服务器

    搭建web服务器 www 简介 网址及 HTTP 简介 HTTP 协议请求的工作流程 www 服务器的基本配置 实验 实验一 实验二 基于多个虚拟主机IP 基于多个虚拟端口 基于个人Web站点的Web网站 www 简介 网址及 HTTP 简
  • redis缓存击穿、雪崩、穿透及业务场景

    一 缓存击穿 1 概念 缓存击穿 由于并发查询同一热点数据而缓存的热点数据到时失效导致用户请求直接访问数据库 造成数据库压力过大 2 业务场景 一款冷门商品突然爆火 原本redis中冷门商品数据设置了定时过期 爆火后大量请求同时去redis