Redis 如何解决大 key 问题
前言
嗨👋,大家好,我是雪荷。做为一个后端开发,Redis 是我们经常接触到的一个非关系行数据库。其对我们系统开发和优化有着举足轻重的作用,但是随着业务和用户迅速增长,也会滋生许多的问题,而大 key 就是其中之一。
什么是大 key?
顾名思义,大 key 就是占用内存很大的 key,当然这是我们开发者认为的,而官方对于此概念没有明确的解释。
根据阿里巴巴开发规范解释,有以下 3 种情况可以判定为大 key:
-
string 类型的数据大于 1M
-
hash 类型的数据大于 100M
-
zset 类型的数据成员超过 1000 个
当然以上是阿里给的一个参考,具体还得看业务和服务器配置。
如何解决大 key 呢?
找出大 key
在解决大 key 之前,需要找到哪些是大 key,可以通过redic-cli --bigkeys查看大 key。
解决大 key
开发层面
在开发层面我们可以:
-
对数据进行压缩,减少数据的体积
-
将大 key 拆分为多个小 key
-
选择合适的数据结构,如对象利用 hash 存储,列表用 set 或者 list 存储,对于需要排序的列表用 zset 存储
业务层面
-
仅存储必要或者重要的数据字段,比如存储用户时,对于地址或者年龄等字段进行舍弃存储
数据分布层面
如果我们项目搭建了 redis 集群,可以将大 key 进行拆分,并分散到不同服务器实例上。
开源项目
网址:厚米匹配系统
前端地址:GitHub - dnwwdwd/homieMatching-fronted: homie 匹配系统前端,基于 vuehomie 匹配系统是一个移动端网页的在线云交友平台。实现了按标签匹配、查找用户,基于 Redis GEO 实现搜索附近用户,同时个人还可以建队、组队以打造个人学习队伍。除了添加好友、搜索好友外,还基于 Websocket 实现好友间私聊,方便用户寻找志同道合的学习搭子。
后端地址:GitHub - dnwwdwd/homieMatching: homie 匹配系统是一个移动端网页的在线云交友平台。实现了按标签匹配、查找用户,基于 Redis GEO 实现搜索附近用户,同时个人还可以建队、组队以打造个人学习队伍。除了添加好友、搜索好友外,还基于 Websocket 实现好友间私聊,方便用户寻找志同道合的学习搭子。
欢迎👏大家体验网站也帮忙给我点点🌟哈,真的十分感谢各位,如果任何讲的不对的地方请及时指正。另外,最近在重构 BI 项目(GitHub - dnwwdwd/Lingxi-BI: 灵犀BI-专业的智能生成商业报表的项目),感兴趣的可以点点🌟,谢谢大家。
相关文章:
Redis 如何解决大 key 问题
前言 嗨👋,大家好,我是雪荷。做为一个后端开发,Redis 是我们经常接触到的一个非关系行数据库。其对我们系统开发和优化有着举足轻重的作用,但是随着业务和用户迅速增长,也会滋生许多的问题,而大…...
驱动开发系列33 - Linux Graphics mesa Intel驱动介绍
一:概述 mesa 中的 Intel 驱动体系是为支持 Intel GPU 提供图形 API 的硬件实现部分,主要包括 OpenGL、Vulkan等图形接口,Intel驱动实现整体上分为四层: 第一层:API 层, 实现 OpenGL 和 Vulkan 接口, src/mesa/main、src/vulkan。 第二层:驱动层,实现 OpenGL 和 Vulkan…...
【华为OD-E卷 - 整数编码 100分(python、java、c++、js、c)】
【华为OD-E卷 - 整数编码 100分(python、java、c、js、c)】 题目 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码 字…...
vue3 uniapp封装一个瀑布流组件
新增组件m-waterfall 这样就可以在页面直接使用 不用在引入了 <template><view class"m-waterfall"><view id"m-left-column" class"m-column"><slot name"left" :leftList"leftList"></slot&…...
Android Room 持久化库的介绍及使用方法
Android Room 是 Android Jetpack 组件之一,是 Google 官方推出的用于简化 SQLite 数据库操作的持久化库。它提供了一个抽象层,允许开发者在 SQLite 数据库上执行常见的 CRUD 操作,同时处理数据库连接、数据迁移和查询优化等底层细节。 Andr…...
Go语言中http.Transport的Keep-Alive配置与性能优化方法
在Go语言中,http.Transport是一个用于发送HTTP或HTTPS请求的客户端工具,它提供了许多可配置的参数以优化性能。其中,Keep-Alive配置是性能优化的关键部分。以下是对http.Transport的Keep-Alive配置与性能优化方法的详细解释: 一、…...
设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo
1.策略模式 好处:动态切换算法或行为场景:实现同一功能用到不同的算法时和简单工厂对比:简单工厂是通过参数创建对象,调用同一个方法(实现细节不同);策略模式是上下文切换对象,调用…...
C# 多线程 Task TPL任务并行
先总结一下 之前发展过程的要点 1: 为了保证多线程正确顺序执行 线程同步 2: 为了节省操作系统线程资源 线程池 异步 方式管理 正常来讲 使用这俩个要点 进行使用 多线程可以满足开发使用需求 但是 新的问题产生了 那就是 多个异步操作 需要编写大量的代…...
【matlab】matlab知识点及HTTP、TCP通信
1、矩阵运算 点乘:对于两个同维度的向量,点乘结果是这两个向量对应分量的乘积之和。 点除:是指对两个数组的对应元素进行除法运算。 点幂:表示元素对元素的幂运算。 >> A[1,2,3;4,5,6]; B[1,1,1;2,2,2]>> D1B.*AD…...
kalilinux - msf和永恒之蓝漏洞
Kali最强渗透工具 - metasploit metasploit是什么? msf是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行的sheelcode,并持续保持更新。 具体操作 1、先切换到root用户,使用msfdb init命令初始化metaspl…...
网络安全测评质量管理与标准解读
大家读完觉得有帮助记得关注和点赞!!! 注意说明 刚开始写过一些比较专业的分享,较多粉丝反应看不懂,本次通过大众的通俗易懂的词汇先了解概念然后再分享规范和详细的技术原理 一、网络安全测评质量管理 网络安全测…...
Cesium根据地图的缩放zoom实现不同级别下geojson行政边界的对应展示
实现效果: 随着地图的缩放,展示对应缩放级别下的行政边界。 准备数据: 1.国家行政边界数据 (country.json) 2.省级行政边界数据 (province.json) 3.市级行政边界数据(city.json&…...
Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】
目录 一.shell命令以及运行原理 二.Linux权限的概念与权限管理 2.1Linux权限的概念 sudo普通用户提权 2.2Linux权限管理 2.2.1文件访问者的分类(人) 2.2.2文件类型和访问权限(事物属性) 2.2.3文件权限值的表示方法 字符…...
深入剖析 Wireshark:网络协议分析的得力工具
在网络技术的广阔领域中,网络协议分析是保障网络正常运行、优化网络性能以及进行网络安全防护的关键环节。而 Wireshark 作为一款开源且功能强大的网络协议分析工具,在网络工程师、安全专家以及网络技术爱好者中广受欢迎。本文将深入介绍 Wireshark 的功…...
【AIGC】SYNCAMMASTER:多视角多像机的视频生成
标题:SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页:https://jianhongbai.github.io/SynCamMaster/ 代码:https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…...
PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统
基于深度学习YOLOv5神经网络水果蔬菜检测识别系统,其能识别的水果蔬菜有15种,# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...
Redisson中红锁(RedLock)的实现
一、什么是红锁 当在单点redis中实现redis锁时,一旦redis服务器宕机,则无法进行锁操作。因此会考虑将redis配置为主从结 构,但在主从结构中,数据复制是异步实现的。假设在主从结构中,master会异步将数据复制到slave中…...
小结:路由器和交换机的指令对比
路由器和交换机的指令有一定的相似性,但也有明显的区别。以下是两者指令的对比和主要差异: 相似之处 基本操作 两者都支持类似的基本管理命令,比如: 进入系统视图:system-view查看当前配置:display current…...
使用yarn命令创建Vue3项目
文章目录 1.技术栈2.创建流程2.1创建vue3项目2.2选择配置项2.3进入项目目录 3.使用Yarn启动项目3.1安装依赖3.2运行项目 1.技术栈 yarnvitevue3 2.创建流程 2.1创建vue3项目 vue create 项目名称2.2选择配置项 直接回车可选择Vue3 2.3进入项目目录 cd 项目名称默认在当前…...
Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)
前期文章中我们完成了创建第一个场景、添加轨道控制器的功能,接下来我们继续阐述其他的功能,本篇文章中主要讲述如何应用lil-GUI调试开发3D效果,在开始具体流程和步骤之前,请先查看之前的内容,因为该功能必须在前期内容…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
