【Redis】 拓展:Redis - BigKey方案探讨

BigKey: 用户越多,redis数据越多,bigkey会使得缓存数据更大,网络带宽会被占用,执行效率就低下,高并发的时候吞吐量QPS也会下降。

产生原因:

看如下list:

  • 一个key的内容太大,比如1M,2M,这已经算很大了,有些公司的规范是最大不能超过512K
  • 成员数太多,有写集合有数量限定,比如zset为10000个
  • 集合中的嵌套属性太多,总大小甚至能超过10M

注意:bigkey不仅仅是value的大小,而是一个整体,key的大小,value的数据额结构,也都包含,越复杂的数据结构,那么所占用的空间也会更大。

引发问题:

bigkey 会越来越大,也会占用内存资源,此外由于redis的过期策略(LRU命中率低下则清除对应的key),key有很多都属于set集合,里面相应的键值可能会自动被清楚,会有大多数  key会被动删除,并且频繁的IO处理会影响性能,而且如此也可能出现缓存击穿的现象。

并且也会导致并发的负载不均衡(也就是流量倾斜),因为你是一个bigkey,他只是一个key,这个可以会存在redis汲取中的某个节点上,那么并发上来了,请求全部落在这集群的某一个节点上,而且不会把请求路由到集群的其他节点,因为这个bigkey是固定的。

此外数据查询也会越来越慢,性能也会降低,因为这个值越来越庞大,带宽占用也会越来越高,传输速度就慢了,甚至可能会导致网络的阻塞。

还有一点,bigkey越大,那么响应的,CPU其实也会需要计算的,因为有序列化和反序列化的过程,所以CPU的使用率也会上升,从而影响Redis的性能,甚至影响当前整个云主机节点的性能以及其他应用程序。

解决方案:

  • 对bigkey进行瘦身:页面要什么数据就写什么数据,不要把所有的你觉得有用的数据写到redis中,你觉得有用的不代表当前业务就需要。如果存在嵌套的list(list做为key的某个属性),如果当前业务用不到,或者是其他页面所需要的,则直接删除,等有需要了再进行查询,可以拆为2个redis缓存来做。

  • 压缩数据:查询出来的value很大,也可以通过压缩的算法,直接对数据压缩后在返回到前端,这是一种代码0侵入的方案。压缩算法:LZ4/Snappy。

  • 减少set集合的长度,我们不要把全量的内容都作为一个list,因为没必要,在某些页面上显示的时候只需要显示10个20个,顶多100个就够了,所以业务层需要判断处理,这个set集合不能超过100个,超过100就需要优化,把优先级低的或者不怎么用的直接移除即可,比如根据时间排序,根据点赞数排序等等都行。

  • 多级缓存:在业务层网关层加上缓存,如此就不需要读取redis-server了,如此在业务层或网关层可以直接返回当前的缓存数据即可,减少请求链路流通,带宽占用率就会降低,但是多个地方使用缓存,务必要做到缓存数据的一致性(一定要实现可以考虑弱一致)

  • 拆分集合:比如现在定义这个set集合不能存太多,需要拆为几个子set,合并的set才是总set,那么现在有几千甚至上万的key,则此时我们可以对key进行哈希取模,我们可以定义10个或20个set,取模后根据结果来决定哪个key放入哪个set中,如此这样的set就体积变小了,我们要取数据的时候也根据取模后的结果来获得对应的值即可。这样的做法也能避免缓存数据在集群节点中的倾斜问题。

作业

  • 自己分析现有的key哪些可能会存在bigkey,以提前做好预案或优化。
  • 针对目前的key存储,大多是把对象作为字符串的形式去存储的,这样可以,但不够好,建议作为hash存储,把这个作为优化方案进行修改。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【宝藏系列】物联网中常用的十种通信协议

【宝藏系列】物联网中常用的十种通信协议 文章目录 【宝藏系列】物联网中常用的十种通信协议1️⃣MQTT2️⃣CoAP3️⃣AMQP4️⃣XMPP5️⃣LwM2M6️⃣HTTP7️⃣DDS8️⃣Bluetooth Low Energy9️⃣LoRaWAN1️⃣0️⃣NB-IoT 1️⃣MQTT MQTT(Message Queuing Telemetry T…

JNDI注入-高版本绕过

参考博客: JNDI注入与动态类加载 探索高版本 JDK 下 JNDI 漏洞的利用方法 - 跳跳糖 (tttang.com) 分析版本 jdk8u201 分析流程 修复 在ldap绕过中,我们讲了LDAP的修复,下面用jdk8u201具体来看下修复。 修复之前,利用是在L…

英文文献翻译方法哪个好?高效率的翻译方法分享

三伏天的酷热也抵挡不住学术人探索知识的脚步,阅读和翻译英文文献几乎已经成为了许多研究者和学者的日常。然而在面对浩如烟海的英文资料时,如何高效准确地进行翻译,成为了亟待解决的问题。 今天我便挖掘到了5款实用的英文文献翻译工具&…

【论文共读】【翻译】【GPT】Improving Language Understanding by Generative Pre-Training

GPT 原论文地址 翻译: Improving Language Understanding by Generative Pre-Training 通过生成式预训练提高语言理解能力 0. 摘要 自然语言理解包括各种不同的任务,例如文本蕴涵、问答、语义相似性评估和文档分类。尽管大量未标记的文本语料库很丰富…

《昇思25天学习打卡营第24天》

接续上一天的学习任务,我们要继续进行下一步的操作 构造网络 当处理完数据后,就可以来进行网络的搭建了。按照DCGAN论文中的描述,所有模型权重均应从mean为0,sigma为0.02的正态分布中随机初始化。 接下来了解一下其他内容 生成…

科普文:万字梳理高性能 Kafka快的8个原因

概叙 科普文:万字详解Kafka基本原理和应用-CSDN博客 科普文:万字梳理31个Kafka问题-CSDN博客 我们都知道 Kafka 是基于磁盘进行存储的,但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点,其吞吐量动辄几十上百万。 在座的…

苹果safari历史记录如何恢复?4大秘籍,重访历史足迹

作为苹果设备上的默认浏览器,Safari为我们提供了便捷、快速的网页浏览体验。但是,如果出现意外删除或其他情况,我们可能会丢失Safari历史记录,这无疑给我们工作和学习带来了诸多不便。本文旨在帮助广大iPhone用户解决这一难题。通…

【音频识别】十大数据集合集,宝藏合集,不容错过!

本文将为您介绍10个经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 RenderMe-360 发布方: 上海人工智能实验室 发布时间: 2023-05-24 简介: RenFace是一个大规模多视角人脸高清视频数据集,包含多样的…

便携移动工作站,端侧 AI 大模型设备折腾笔记:ROG 幻 X 和 4090 扩展坞

为了本地测试和开发更丝滑,最近入手了一套新设备 ROG 幻 X Z13 和 ROG XG Mobile 4090 扩展坞。 基于这套设备,我搭了一套 Windows x WSL2 x CUDA 的开发环境。分享一下折腾记录,或许对有类似需求的你也有帮助。 写在前面 最近因为各种事情…

学习web前端三大件之HTML篇

HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形…

单链表习题——快慢指针类习题详解!(2)

前言: 正如标题所言,小编今天要讲述快慢指针的相关习题,可能有些读者朋友会有些疑问了,这快慢指针是个什么东西?不要着急,下面紧跟小编的步伐,开启我们今天的快慢指针之旅! 目录&…

安全基础学习-CRC理解与计算

由于一些任务要求需要了解CRC校验,于是来学习一下。 新人学习,大佬绕路。 前言 CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC&…

Seata 入门与实战

一、什么是 Seata Seata 是一款开源的分布式事务解决方式,致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式事务解决方案。 二、Seata 组成 事务协调者(Transacti…

Potree点云可视化库在Vue项目中的应用

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Potree点云可视化库在Vue项目中的应用 应用场景介绍 Potree是一个用于大规模点云渲染和交互的开源JavaScript库。它提供了高效的点云可视化和处理功能,广泛应用于地理信息系统(GIS&…

整理几个常用的Linux命令(Centos发行版)

如果工作中需要经常整理一些文档,需要汇总一下,现有的服务器资源信息,那么这篇文章适合你; 如果你是一名开发者,需要经常登录服务器,排查应用的出现的一些问题,那么这篇文章适合你;…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-61 - 隐藏元素定位与操作

软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 对于前端隐藏元素,一直是自动化定位元素的隐形杀手,让人防不胜防。脚本跑到隐藏元素时位置时报各种各样的错误,可是这种隐藏的下拉菜单又没…

【创新实践新纪元】SmartEDA如何引领学校电子设计实践基地的飞跃式发展

在这个日新月异的科技时代,电子设计已成为推动社会进步与创新的重要力量。而教育,作为培养未来科技人才的摇篮,如何更有效地提升学生的实践能力与创新思维,成为了摆在每所学校面前的重大课题。今天,就让我们一同探索Sm…

列表内容过多卡顿?有索引栏如何实现滚动加载?

👓写在前面 很多小伙伴可能在开发业务中会遇到这种问题,数据列表过多,造成dom一次性渲染卡顿,本文主要介绍滚动加载,实现在有索引栏的列表中使用滚动加载的方法。 本文技术栈使用的是vue2vant2,其他框架组…

阿里云服务器 Ubuntu18.04 安装 mysql8.0并允许外部连接

参考教程: 官网教程 参考教程一 首先彻底删除mysql5.7 dpkg --list|grep mysql #查看 sudo apt-get remove mysql-common #卸载 sudo apt-get autoremove --purge mysql-server-5.7 #版本自己修改 dpkg -l|grep ^rc|awk {print$2}|sudo xargs dpkg -P #清除残留数…

vite打包文件配置到IIS出现页面、图片加载不出来的问题

问题描述: 用vitevue3开发的项目,打包后放在服务器上,然后配置了IIS,用链接访问后出现白页面。 解决方案: 修改vite.config.js文件中的base路径:/改为./ 解决方案: 1.查看页面报错原因&…