商品中心关于缓存热key的解决方案

缓存热key一旦被击穿,流量势必会打到数据库,如果数据库崩了,游戏直接结束。

从两点来讨论:如何监控、如何解决。

如何监控

  1. 通过业务评估:比如营销活动推出的商品或者热卖的商品。
  2. 基于LRU的命令,redis-cli --hotkeys,通过任务调度定时去获取?
  3. 基于redis客户端、或者代理层、或者redis监控策略,利用大数据领域的流式计算技术(如Storm、Spark Streaming、Flink)进行实时数据访问次数的统计,一旦发现热点数据,即可进行处理。

分析

为什么不直接访问数据库获取数据?
因为数据库主要是为了增量数据持久化,资源宝贵;库的并发连接数也有瓶颈;不好抗啊。

为什么要使用缓存?
缓存可以抗住海量并发;内存操作,速度快;

怎么保证缓存性能?
缓存预热;

缓存中间抗不住怎么办?
采用多级缓存,先访问本地缓存,再访问Redis缓存,减轻压力;增加Redis节点;

本地缓存需要注意些什么?
缓存核心(最)热点的数据;控制好缓存数据量级;堆内存啊,别OOM了;

缓存失效怎么办?
在访问数据库的时候加锁,控制流量,允许一个请求访问数据库,其他流量等待。

加什么锁?jvm锁还是分布式锁?
加本地锁就够了,数据库还没那么不堪一击,而且本地锁无网络开销、轻量快捷。

缓存哪些数据?
上面说了如何监控热点数据;关于动态的热点数据也需要实时监控?

还有什么兜底方案吗?
针对数据库流量进行限流,做最后的防护;

怎么做流量预估?
业务评估;全链路压测;

怎么保证可用性?
止血方案(开关、配置);监控;降级策略;扩容;

如何应对RPC线程池溢出造成的QPS瓶颈问题?
在客户端做一层缓存,同服务端缓存的逻辑一样。

如何解决

  1. 评估流量(redis和mysql是否能扛得住)
  2. 热key进行拆分,分散到不同的redis节点;增加redis节点
  3. 多级缓存,本地缓存 -》 redis缓存
  4. 如下策略:加锁+限流

伪代码

public class Main {private static final ReentrantLock lock = new ReentrantLock();private static final  AtomicInteger retryCount = new AtomicInteger(0);public String getCacheValue(String key) throws Exception {try{String result = cache.get(key);if (result == null) {boolean b = lock.tryLock(200, TimeUnit.MILLISECONDS);if (b || retryCount.get() > 10) {String limit = limit.get(key);if (!limit.equals("限流")) {result = db.get(key);}} else {Thread.sleep(200);retryCount.incrementAndGet();result = this.getCacheValue(key);}}}finally{lock.unlock();}return result;}
}

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

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

相关文章

【数据结构】——双链表的实现(赋源码)

双链表的概念和结构 双链表的全称叫做:带头双向循环链表 它的结构示意图如下 注意:这⾥的“带头”跟前⾯我们说的单链表的“头结点”是两个概念,实际前⾯的在单链表阶段称呼不严谨,但是为了读者们更好的理解就直接称为单链表的头…

Transformer——逐步详解架构和完整代码搭建

好久没更新博客,后面更新会勤一些。今天想聊一下Transformer,Transformer在NLP和CV领域都有着重要的价值,甚至可以看作是一个基础模型,这篇博客将通过详细代码深入解析Transformer模型总体架构图各个部分的的作用和搭建:论文链接&…

遥感领域新方向!Mamba+RS论文汇总!

本文总结了将Mamba应用至遥感领域的相关论文(14篇),涉及到的论文见文末链接,具体如下: 文章目录 1. 遥感图像处理2. 多/高光谱图像分类3. 变化检测/语义分割4. 遥感图像融合/超分辨率 1. 遥感图像处理 论文题目&#…

6.3 面向对象技术-设计模式

设计模式 创建型模式 结构型模式 行为型模式 真题

配置本地开发服务器代理请求以及登录模块开发(二)

项目初始化完成之后,准备开始进行项目的开发,首先配置好开发环境作为整个项目的基础 一、配置代理 1、config/proxy.ts配置代理 export default {// 如果需要自定义本地开发服务器 请取消注释按需调整dev: {// localhost:8000/api/** -> https://p…

第07课 Scratch入门篇:水果音乐钢琴

水果音乐钢琴 入门篇适合新手,如您已经学过,可以忽略本节课! 一、故事背景: 在一个充满创意和想象的奇妙世界里,有一架与众不同的钢琴——水果音乐钢琴。这架钢琴的键盘不是由普通的黑白键组成,而是由各种…

http post请求 - 最简测试环境 - 使用flask

1.缘起 工作中,我们有时需要测试web post功能是否正常。这类测试,客户端的请求很容易实现,比如portman,比如非常简单的命令行curl语法: curl -X POST http://127.0.0.1:5000/post-endpoint/ -F "warning_image/p…

鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇

一、概述 云数据库是一款基于对象模型的数据库,采用存储区、对象类型和对象三级结构。 数据模型 存储区 存储区是一个独立的数据存储区域,多个数据存储区之间相互独立,每个存储区拥有完全相同的对象类型定义 --类似于关系型数据库中的da…

一番赏小程序开发,为消费者带来更多新鲜体验

一番赏作为经典的潮玩方式,深受消费者的喜爱,一番赏还会与不同的热门IP合作,不断推出新的赏品,吸引众多粉丝。赏品的内容非常丰富,从手办、公仔玩具等,还设有隐藏款和最终赏商品,对玩家拥有着非…

哲学CSSCI南大核心期刊论文投稿推荐(含发表方向)

发表哲学方向的C刊论文,却在选刊上一直找不到合适的。本文介绍14本哲学CSSCI南大核心期刊名单,帮助您快速找到哲学类期刊! 哲学类CSSCI核心期刊推荐: 1、逻辑学研究 发表内容方向:符号逻辑、非形式逻辑、逻辑与哲学、…

Synchronized的锁升级过程是怎样的?

文章目录 一、Synchronized的使用1、修饰实例方法2、修饰静态方法3、修饰代码块4、总结: 二、Monitor1、Java对象头1.1 32 位虚拟机的对象头1.2 64位虚拟机的对象头 2、Mark Word 结构3、Moniter4、Synchronized 字节码5、轻量级锁6、锁膨胀7、自旋优化8、偏向锁9、…

命令行使用ADB,不用root,完美卸载小米预装软件

ADB安装与运行 install java 下载安装 注意选择JDK17以上版本 https://www.oracle.com/java/technologies/downloads/#jdk22-windows 选择中间的安装文件下载 编辑系统变量 C:\Program Files (x86)\Java\jdk-22 C:\Program Files (x86)\Java\jdk-22\bin 把C:\Progra…

K210视觉识别模块学习笔记7:多线程多模型编程识别

今日开始学习K210视觉识别模块: 图形化操作函数 亚博智能 K210视觉识别模块...... 固件库: canmv_yahboom_v2.1.1.bin 训练网站: 嘉楠开发者社区 今日学习使用多线程、多模型来识别各种物体 这里先提前说一下本文这次测试实验的结果吧:结果是不太成…

视频去水印免费电脑版 pdf压缩在线免费网页版 pdf压缩在线免费 简单工具软件详细方法步骤分享

消除视频中的恼人水印,是许多视频编辑爱好者的常见需求。在这篇文章中,我们将探讨几种视频去水印的技巧,在数字化时代,视频和图片的传播越来越方便,但随之而来的水印问题也让人头疼。本文将为您详细介绍视频剪辑去水印…

捕获会自动消失的消息提示弹窗

如上图,我们会在一些场景碰到会自动消失的消息提示弹窗,一般存在个3-5秒,我们在做UI断言时,需要监测这个弹窗是否会出现,就需要去捕获这个弹窗的位置 我们打开浏览器的开发者模式(F12),找到源码(Sources) …

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

MiniExcel:.NET中处理Excel的高效方案

在.NET开发环境中,处理Excel文件是一项常见的任务,无论是数据导入、导出还是报表生成。传统的解决方案可能存在性能瓶颈或功能限制。MiniExcel作为一个现代、高效的库,为.NET开发者提供了一个强大的工具来简化Excel操作。本文将介绍MiniExcel…

爬虫程序在采集亚马逊站点数据时如何绕过验证码限制?

引言 在电商数据分析中,爬虫技术的应用日益广泛。通过爬虫技术,我们可以高效地获取大量的电商平台数据,这些数据对于市场分析、竞争情报、价格监控等有着极其重要的意义。亚马逊作为全球最大的电商平台之一,是数据采集的重要目标…

【技术升级】Docker环境下Nacos平滑升级攻略,安全配置一步到位

目前项目当中使用的Nacos版本为2.0.2,该版本可能存在一定的安全风险。软件的安全性是一个持续关注的问题,尤其是对于像Nacos这样的服务发现与配置管理平台,它在微服务架构中扮演着核心角色。随着新版本的发布,开发团队会修复已知的…

【解决】ubuntu20.04 root用户无法SSH登陆问题

Ubuntu root用户无法登录的问题通常可以通过修改‌SSH配置文件和系统登录配置来解决。 修改SSH配置文件 sudo vim /etc/ssh/sshd_config 找到 PermitRootLogin 设置,并将其值更改为 yes 以允许root用户通过SSH登录 保存并关闭文件之后,需要重启SSH服务…