Redis相关的那些事(一)

背景

目前工作所负责的工作主要是投放业务,属于读高并发场景,记录一下之前碰到的redis相关的问题。

热点大值Key&缓存击穿问题

问题表现

在某次流量峰值过程中,redis的CPU突然飙升,从监控看起来就是CPU飙升到一定程度,内存突然掉0,然后命中率掉0(实际上是主节点被打挂了,触发了主备切换)。流量和系统调用链路逻辑跟之前并无区别。

原因分析

先看一下计划发布流程和投放端读取计划配置的逻辑:
计划配置发布更新流程
具体逻辑:

  1. 配置端会生成一个全局的索引index_key,来存放坑位和所关联投放计划的关系(注意这里是一个大值key);
  2. 配置端每次更新完全局索引后,会在redis刷新一个全局的时间戳time_key,记录索引的最后更新时间;
  3. 投放端请求进来后,获取redis时间戳缓存(这里是一个热点key),会判断本地索引时间戳缓存是否和redis的时间戳一致,若时间戳不一致,会刷新本地全局index缓存,刷新成功后会刷新本地时间戳缓存;

好处:

  1. 只要时间戳更新,投放端就会获取最新的索引版本,能保证索引发布后,所有对于所有机器来说就马上生效;

弊端

  1. 时间戳redis值本来就是个热点key,投放端每次请求都会打到redis;
  2. 全局索引会是大值key,当QPS很高的时候,每次发布新的索引之后,所有机器会同时触发刷新,若集群的机器数量很多的时候,瞬间会打到同一个redis分片

上面所说的问题就是由于在流量峰值期间,有运营发布了新计划,导致全局索引刷新,瞬间1000+qps打到同一个redis分片获取全局索引,导致分片被打崩。

解决办法:

  1. 最简单的解决办法就是把全局索引复制多个备份,key值加入后缀,使value分布到redis集群的每个分片中。比如复制20个备份,index_key_{random},投放端机器随机访问0-20后缀的全局索引分片,解决热点问题;
    弊端:需要保持多个备份的一致性,可能会存在一致性问题;
  2. 把全局索引根据业务划分为更小的颗粒度。比如在这个场景,可以把全局索引改为资源位-计划的索引,减少value的值大小,而且根据资源位进行索引后,value的分布也自然就打散了;
  3. 使用压缩工具,减少value的值。因为存放的value为json格式,json格式其实是有很大的压缩空间,使用压缩工具能够大大减少value的值;
  4. 增加时间戳本地缓存过期时间,使更新本地索引的请求不会同时触发,通过减少并发量解决问题。
    弊端:会导致计划发布之后,投放端会有延迟更新,因为本地缓存时间的存在,所以并不会马上去校验索引是否更新。
    增加本地缓存过期时间

总结

总结一下,解决热点大值key基本就几个思路:

  1. 通过预热的方式,把热点key打散,把压力分散到整个集群;
  2. 通过减小value的size,压缩、修改缓存颗粒度;
  3. 引入缓存过期时间对峰值尖刺进行削峰,减少并发量;

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

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

相关文章

如何使用Jellyfin结合内网穿透搭建私人影音平台远程可访问

作者简介: 懒大王敲代码,计算机专业应届生 今天给大家如何使用Jellyfin结合内网穿透搭建私人影音平台远程可访问,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 前言…

ARM 汇编语言知识积累

博文参考: arm中SP,LR,PC寄存器以及其它所有寄存器以及处理器运行模式介绍 arm平台根据栈进行backtrace的方法-腾讯云开发者社区-腾讯云 (tencent.com) 特殊功能寄存器: SP: 即 R13,栈指针,…

JuiceSSH结合内网穿透实现公网远程访问本地Linux虚拟机

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

MAC鼠标中键的使用

MAC鼠标没有鼠标中键,于是在一些场景中用起来非常麻烦,这里介绍几种键盘快捷键鼠标左键实现中键功能的例子: 1)在sublime text 或者pycharm等一些文本编辑器或IDE中实现中键修改一列数据中特定位置的值 FNOPT左键另外还有C4D&…

Go爬虫程序采集抖音快手商户 开店不再难

最近遇到一群客户,在疯狂做抖店,看他们朋友圈一天销售额都好几万,几天就能起一个店铺,而且一个人可以管理很多店铺。今天我们就以抖店上的商户种类来做个数据采集,主要是分析商品类别以及热门程度。 实现这个任务&…

【四】记一次关于架构设计从0到1的讨论

记一次关于架构设计从0到1的讨论 简介: 在一次面试中和面试官讨论起来架构设计这个话题,一聊就不知不觉一个小时了,感觉意犹未尽。现在回想起来感觉挺有意思的,古人说独学而无友则孤陋而寡闻,的确是这样的&#xff0c…

C++ opencv-3.4.1 提取不规则物体的轮廓

在学习opencv的时候,对一张照片,需要标注照片上物体的不规则轮廓。 如图: 使用opencv进行物体的轮廓处理,关键在于对照片的理解,前期的照片处理的越好最后调用api出来的结果就越接近理想值。 提取照片中物体分如下三步&#xff…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——windows应急响应篇

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

【Spring】SpringBoot 配置文件

文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map…

【prompt一】Domain Adaptation via Prompt Learning

1.Motivation 当前的UDA方法通过对齐源和目标特征空间来学习域不变特征。这种对齐是由诸如统计差异最小化或对抗性训练等约束施加的。然而,这些约束可能导致语义特征结构的扭曲和类可辨别性的丧失。 在本文中,引入了一种新的UDA提示学习范式&#xff0…

RPC 实战与原理

文章目录 什么是 RPC?RPC 有什么作用?RPC 步骤为什么需要序列化?零拷贝什么是零拷贝?为什么需要零拷贝?如何实现零拷贝?Netty 的零拷贝有何不同? 动态代理实现HTTP/2 特性为什么需要服务发现&am…

ElasticSearch入门介绍和实战

目录 1.ElasticSearch简介 1.1 ElasticSearch(简称ES) 1.2 ElasticSearch与Lucene的关系 1.3 哪些公司在使用Elasticsearch 1.4 ES vs Solr比较 1.4.1 ES vs Solr 检索速度 2. Lucene全文检索框架 2.1 什么是全文检索 2.2 分词原理之倒排索引…

easypoi通过反射修改表头,poi,workbook修改表头

没废话上代码, 使用easypoi导出时一般会用到一个实体类 提供一个示例代码: 实体类: Data public class TestVO {private String id;Excel(name "字段1")private String findId1;Excel(name "字段2")private String fi…

Windows 10中查找文件的3种方法,就差不多够你查找想要的文件了

本文介绍了在Windows 10计算机上搜索文件的两种主要方法,以及对第三方搜索应用程序的建议和更好地搜索文件的有用提示。 使用任务栏搜索栏进行常规搜索 永久位于屏幕底部的搜索栏是大多数人的首选搜索方法,使用起来毫不费力。如果你不知道在哪里可以找…

2023航天推进理论基础考试划重点(W老师)绪论固体推进剂

1、推进系统的分类: 按工作原理分, 直接反作用发动机(喷气发动机) 火箭发动机、组合发动机、冲压发动机、涡轮喷气发动机、涡轮风扇发动机 间接反作用发动机 活塞式发动机、涡轮螺旋桨发动机、涡轮轴发动机、航空电动机 2、后面不细讲的火箭发动机要…

Windows系统重启Redis服务

Windows系统 在安装Redis的目录下打开终端 执行 redis-cli.exe shutdown先停止 Redis 服务 然后 执行 redis-server.exe启动Redis服务

浅谈Dubbo核心概念及架构流程

浅谈Dubbo核心概念及架构流程 前言重要概念1、SPI2、ServiceBean3、URL4、Invoker 整体流程1、架构图2、调用链路 笔者碎碎言,我们学习Dubbo应该学的是什么? 笔者是一名业务开发,认为一切目的都要为我们的目标服务,即日常工作有帮…

医院智慧能源管理平台,为医疗机构高效控能!

随着医院的不断扩大与发展,能源问题日益严重。大型医院能耗计量点位繁多,数据采集方式落后,难以保证计量管理的准确性与科学性。为了对医院能耗进行精细化管理,实时监测用能情况,需要建议一个完善的监管体系。基于能源…

Java Heap Space堆内存异常处理

Heap Space问题是Java开发中常见的内存溢出问题之一,我们需要理解其原因和表现形式,然后通过优化代码、增加JVM内存和使用垃圾回收机制等方法来解决。 场景 新增数据,富文本插入多张图片,总共总共大小6.6MB,提交报50…

【XML】TinyXML 详解(一):介绍

【C】郭老二博文之:C目录 1、简介 优点: TinyXML 是一个简单、小型的 C XML 解析器,可以轻松集成到项目中。 TinyXML 解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型 (DOM) TinyXML 是在 ZLib 许可下发布的&a…