关于Redis的BigKey

news2024/9/30 9:31:15

文章目录

  • 准备
  • keys * 等命令的危害与避免
  • 不用keys * ,应该用什么
  • BigKey
    • 阿里云Redis开发规范
    • 多大算Big
    • 危害
    • 怎么产生的?
    • 怎么发现BigKey
    • 怎么删除
      • String类型
      • 使用hscan每次获取少量field-value,再使用hdel删除每个field
      • 使用ltrim渐进式逐步删除,直到全部删除完成
      • 使用sscan每次获取部分元素,再使用srem命令删除每个元素
      • 使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素
    • 生产调优

准备

往redis里插入2000万测试数据key

# 生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;

通过redis提供的管道 --pipe命令插入100万大批量数据
cat /tmp/redisTest.txt | /opt/redis-7.0.0/src/redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe

查看数据量大小

redis-cli dbsize

keys * 等命令的危害与避免

这个指令没有offset,limit参数,是要一次性吐出所有满足条件的key,由于redis是单线程的,其所有操作都是原子性的,而keys算法是遍历算法,时间复杂度是n,如果哦实例中有千万级别以上的key,这个指令就会导致redis服务卡顿,所有读写Redis的指令就会被延后甚至超时,可能引起缓存雪崩甚至数据库宕机。

生产上限制keys *,flushdb,flushall等危险命令以防止误删误用?
配置中设置禁用命令即可
在这里插入图片描述
在这里插入图片描述

不用keys * ,应该用什么

使用Scan命令,用于迭代数据库中的数据库键。
SCAN cursor定义:
基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程,以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历,不保证每次执行都返回某个给定数量的元素,支持模糊查询,一次返回的数量不可控,只是大概率符合count参数。
在这里插入图片描述
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程

SCAN 返回一个包含两个元素的数组:

  • 第一个元素是用于进行下一次迭代的新游标,
  • 第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回零表示迭代已结束。

SCAN的遍历顺序:
非常特别,它不是从第一维数组的第零位一直遍历到末尾,而是采用了高位进位加法来遍历。之所以使用这样特殊的方式进行遍历,是考虑到字典的扩容和缩容时避免槽位的遍历重复和遗漏
在这里插入图片描述

BigKey

阿里云Redis开发规范

拒绝BigKey防止网卡流量,慢查询。

  • String类型控制在10kb以内,hash,list,set,zset元素个数不用超过5000
  • 非字符串的BigKey不要使用del删除,使用hscan,sscan,zscan方式渐进式删除,同时注意防止BigKey过期时间自动删除(类似100万的zset设置固定时间过期,会触发del操作造成堵塞,而且该操作不会出现在慢查询中)

多大算Big

String是value,最大512MB但是大于等于10KB就是BigKey
list,hash,set,zset,个数超过5000就是BigKey

危害

  • 内存不均匀,集群迁移困难
  • 超时删除,大key阻塞
  • 网络流量阻塞

怎么产生的?

比如汇总统计,某个报表日积月累的积累
比如粉丝列表,粉丝越来越多

怎么发现BigKey

redis-cli --bigkeys
给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小,但是想查询大于10kb的所有key,–bigkeys参数就无能为力了。
每隔 100 条 scan 指令就会休眠 0.1s,ops 就不会剧烈抬升,但是扫描的时间会变长
redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1
在这里插入图片描述

解决查看大于10kb的所有key,需要用到memory usage来计算每个键值的字节数。
MEMORY USAGE命令给出一个key和它的值在RAM中所占用的字节数。返回的结果是key的值以及为管理该key分配的内存总字节数。
对于嵌套数据类型,可以使用选项SAMPLES,其中count表示抽样的元素个数默认值为5。==当需要抽样所有元素时,使用SAMPLES 0 ==。

MEMORY USAGE key [SAMPLE count]

怎么删除

String类型

一般用于del,如果过于庞大unlink(非阻塞式删除)

使用hscan每次获取少量field-value,再使用hdel删除每个field

HSCAN key cursor
在这里插入图片描述
hscan + hdel
在这里插入图片描述

使用ltrim渐进式逐步删除,直到全部删除完成

LTRIM KEYNAME START STOP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用sscan每次获取部分元素,再使用srem命令删除每个元素

在这里插入图片描述
在这里插入图片描述

使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素

在这里插入图片描述
在这里插入图片描述

生产调优

redis.conf配置文件LAZY FREEING相关说明
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

管理后台项目-02-平台属性组件模块

目录 1-分类三级列表 2-属性列表 2.1-需求功能分析 2.2-功能代码实现数据获取和变动 2.3-动态渲染数据 3-新增修改属性 3.1-点击新增属性逻辑处理 3.2-点击列表页面修改属性逻辑 3.3-新增和修改属性 3.4-点击删除属性值 3.5-点击删除属性 1-分类三级列表 需求&…

通过案例来了解响应式开发的音频控件

目录 前言 一、视频控件的使用方法 1.语法 2、部分功能介绍 二、案例举例 三、播放效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5表单等功能方法的代码&#xff0c;这也是很多教材的一个典型案例&#xff1b; 2.本文将讲解涉…

IMX6ULL裸机篇之中断实验-通用中断驱动说明二

一. 通用中断驱动 本文是 IMX6ULL 裸机篇---中断实验。旨在用 C 语言编写一套简单的中断驱动框架代码。 在 start.S 文件中&#xff0c;我们在中断服务函数 IRQ_Handler 中调用了 C 函数 system_irqhandler 来处 理具体的中断。 本实验会认识中断控制器&#xff1a;…

RT-DETR论文学习笔记(DETRs Beat YOLOs on Real-time Object Detection)

论文地址&#xff1a;https://arxiv.org/abs/2304.08069 代码地址&#xff1a;GitHub - PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time mult…

完美解决丨ValueError: time data ‘2018/12/24‘ does not match format ‘%Y/%m/%d‘

这里我选择的是&#xff1a; python from datetime import datetime date datetime.strptime(2018/12/24, %Y/%m/%d) 如果你可以执行这段代码&#xff0c;那么你可能会收到这样的报错&#xff1a; python Traceback (most recent call last): File "C:\Users\Administra…

机器学习中最基本的概念之一:数据集、样本、特征和标签

本文重点 数据集、样本、特征和标签是机器学习中的重要概念,这些概念在机器学习算法的设计和实现过程中起着至关重要的作用。在本文中,我们将对这些概念进行详细的讲解,以便更好地理解机器学习算法的基本原理和应用。 一、数据集 数据集是机器学习中最基本的概念之一,它…

VUE3 取Slot元素方法

VUE3 取Slot元素方法 话说前面,这方法诡异的很…尽量不要用. 我这里要实现一个对slot元素进行方法拓展的事情 就比如说我要给一个元素添加自定义拖放事件,正常来说大概是这样的 //vue3 <template><div class"custom" ref"el"><slot> …

Visual Instruction Tuning: 用LLaVA近似多模态GPT-4

©Paperweekly 原创 作者 | Chunyuan Li 使用 GPT-4 进行视觉指令学习&#xff01;Visual Instruction Tuning with GPT-4! ▲ Generated by GLIGEN (https://gligen.github.io/): A cute lava llama and glasses 我们分享了 LLaVA (Language-and-Vision Assistant)&#…

linux工具gcc/g++/gdb/git的使用

目录 gcc/g 基本概念 指令集 函数库 &#xff08;重要&#xff09; gdb使用 基本概念 指令集 项目自动化构建工具make/makefile 进度条小程序 ​编辑 git三板斧 创建仓库 git add git commit git push git status git log gcc/g 基本概念 gcc/g称为编译器…

集合详解之(五)Map集合

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;Map集合的介绍&#x1fa85;如何保证键的不重复性&#xff1f;&#xff08;equals()与hashCode()方法的联用&#xff09;&#x1f380;HashMap集合及常用方法&#x1f38…

电能计量自动化系统在用电管理上的应用

【摘要】&#xff1a;电能计量自动化系统在用电管理上的应用&#xff0c;不仅能够实现远程自动抄表&#xff0c;减少企业在人力资源成本上的投入&#xff0c;切实地维护企业的核心利益&#xff0c;创造出更多的经济效益。还能够通过装置在线监测与配网防窥电功能实现对电能计量…

D. Tokitsukaze, CSL and Stone Game(博弈)

Problem - D - Codeforces 时津风和CSL正在玩一个石头的小游戏。 一开始&#xff0c;有n个石子堆&#xff0c;其中第ii堆有aiai石子。两位玩家轮流走棋。时津风先走。每一回合&#xff0c;棋手选择一个非空的棋堆&#xff0c;并从该棋堆中准确地取出一块石头。如果在轮到他之前…

2 路 500MSPS/1GSPS/1.25GSPS 14 位直流耦合 AD 采集 FMC 子卡模块

板卡概述 FMC155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、 500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用 ADI 的 AD9680 芯片&#xf…

Python每日一练(20230420)

目录 1. 数组逐位判断 &#x1f31f; 2. 交错字符串 &#x1f31f;&#x1f31f; 3. 二进制求和 &#x1f31f; 4. 四舍六入五成双规则 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 J…

12、HOOK原理下

一、去符号和恢复符号 1.1 Stip和 Strip Type解释 strip在iOS中的作用是 剥掉目标文件中一些符号信息和调试信息&#xff0c;使文件变小。dead code strip &#xff1a; 死代码剥离、然后再去链接。那么strip在哪些地方不能起作用呢&#xff1f; 动态库 不能strip全局符号、因…

Windows下使用SSH密钥实现免密登陆Linux服务器

工具&#xff1a; win10、WinSCP 生成ssh密钥&#xff1a; 打开终端&#xff0c;使账号密码登录&#xff0c;输入命令 ssh-keygen -t rsa 会提示密钥存放路径&#xff0c;一般存放在默认路径&#xff0c;直接回车即可&#xff0c;中间会提示输入密码&#xff0c;这里需要注…

工作流自动化和RPA自动化,哪个更适合你?

2018年&#xff0c;一款名为《Overcooked!2》&#xff08;又名“胡闹厨房”、“分手厨房”&#xff09;的多人合作模拟类游戏风靡全球&#xff0c;在游戏中&#xff0c;玩家扮演厨师在充满各种障碍和危险的厨房里准备食材、烹饪、上菜和清理&#xff0c;需要在尽可能短的时间内…

window11开启wsl2

前言 以前玩linux&#xff0c;总是习惯装双系统&#xff0c;其实双系统特别麻烦。wsl现在的功能其实挺强大的&#xff0c;完全可以代替双系统&#xff0c;去完成一些在linux上的环境搭建。这篇文章记录下window11如何开启wsl2功能&#xff0c;并且安装ubuntu系统。 开启wsl2功…

2023自助洗车店系统解决方案共享洗车无人洗车风口

2021年中国汽车保有量预计超6.3亿辆,洗车市场需求巨大,传统洗车投资大、费用贵、成本高耗水大、占地面积大,而自助洗车机占据传统洗车耗水量1/4 ,占地面积1/70 ;节能环保得到政府的大力支持,且结合信息物联技术,实现智能化管理,高效能运营,灵活便捷服务,符合智慧城市发展原则,成…

开放式耳机有什么好处,列举几款性能高的开放式蓝牙耳机

骨传导耳机也称为“不入耳式”耳机&#xff0c;是一种通过颅骨、骨迷路、内耳淋巴液和听神经之间的信号传导&#xff0c;来达到听力保护目的的一种技术。由于它可以开放双耳&#xff0c;所以在跑步、骑行等运动时使用十分安全&#xff0c;可以避免外界的干扰。这种耳机在佩戴时…