Redis高阶2-BigKey

ops/2025/1/24 2:41:40/

Redis进阶-BigKey

MoreKey

redis2000Wkey_4">大批量往redis里面插入2000W测试数据key

  • LinuxBash下面执行,插入100w数据脚本
# 生成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命令插入100W大批量数据

结合自己机器的地址:

cat /tmp/redisTest.txt | redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe

请添加图片描述

  • 尝试keys * 花费时间

    请添加图片描述

key * 这个指令有致命的弊端,在实际环境中最好不要使用

请添加图片描述

  • 生产上限制keys */flushdb/flushall等危险命令以防止误删误用

    通过配置设置禁用这些命令,redistribution。conf在SECURITY这一项中

请添加图片描述
请添加图片描述

  • SCAN命令

    1.语法

    请添加图片描述

2.特点

​ Redis Scan命令基本语法如下:

SCAN cursor [MATCH pattern] [COUNT count]

​ cursor -游标

​ pattern -匹配的模式

​ count -指定从数据集里返回多少元素,默认值为10。

SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

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

第一个元素是用于进行下一次迭代的新游标,

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

SCAN的遍历顺序

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

3.使用

请添加图片描述

BigKey

多大算Big

  • 参考《阿里云Redis开发规范》

    请添加图片描述

  • string和二级结构

string是value,最大512MB但是≥10KB就是bigkey

list、hash、set和zset,个数超过5000就是bigkey

​ List:一个列表最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素)。

​ hash:Redis中每个hash可以存储2^32-1键值对(40多亿)

​ set:集合中最大的成员数为2^32-1 (4294967295,每个集合可存储40多亿个成员)。

​ …

  • 危害

    1.内存不均,集群迁移困难

    2.超时删除,大key删除作梗

    3.网络流量阻塞

  • 找出BigKey

    redis-cli --bigkeys

    好处

    给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小

    不足

    想查询大于10kb的所有key,–bigkeys参数就无能为力了,需要用到memory usage来计算每个键值的字节数

    redis-cli --bigkeys -a 111111

    redis-cli -h 127.0.0.1 -p 6379 -a 111111 --bigkeys
    每隔 100 条 scan 指令就会休眠 0.1s,ops 就不会剧烈抬升,但是扫描的时间会变长redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1

    请添加图片描述

MEMORY USAGE 键

请添加图片描述

  • 如何删除

    请添加图片描述

String

一般用del,如果过于庞大unlink

hash

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

请添加图片描述

请添加图片描述

list

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

请添加图片描述

请添加图片描述

set

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

请添加图片描述

Zset

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

请添加图片描述

BigKey生产调优

  • redis.conf配置文件LAZY FREEING相关说明

    阻塞和非阻塞删除命令

    请添加图片描述

优化配置

请添加图片描述


http://www.ppmy.cn/ops/152628.html

相关文章

【二叉树的深搜】计算布尔二叉树的值 求根节点到叶节点数字之和

文章目录 2331. 计算布尔二叉树的值解题思路&#xff1a;后序遍历129. 求根节点到叶节点数字之和解题思路&#xff1a;深度优先搜索 前序遍历 2331. 计算布尔二叉树的值 2331. 计算布尔二叉树的值 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节…

深度解析:CentOS 系统的硬件资源优化技巧

深度解析:CentOS 系统的硬件资源优化技巧 在运维的世界中,硬件资源的高效利用是保障系统性能和稳定性的关键。尤其是在使用CentOS这样的服务器操作系统时,优化硬件资源不仅能提升系统响应速度,还能显著降低运营成本。今天,我将结合实际经验,详细介绍如何在CentOS系统中进…

计算机网络 (49)网络安全问题概述

前言 计算机网络安全问题是一个复杂且多维的领域&#xff0c;它涉及到网络系统的硬件、软件以及数据的安全保护&#xff0c;确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施&#xff0c;保…

Spark SQL中的from_json函数详解

Spark SQL中的from_json函数详解 在Spark SQL中&#xff0c;from_json是一个用于解析JSON数据的函数&#xff0c;主要用于将JSON格式的字符串解析为结构化的数据&#xff08;即StructType或其他Spark SQL数据类型&#xff09;。这个函数在处理半结构化数据&#xff08;如JSON日…

wsl 使用 docker

直接在 wsl 安装 docker , 有可能会失败&#xff0c;可以通过在 windows 安装 Docker Desktop&#xff0c;然后连接 wsl 进行解决 注意&#xff1a; 1. 需要先安装 wsl 2. 使用时要先启动 docker Desktop, 才能在 wsl 中使用 下载&#xff1a; Docker: Accelerated Containe…

海康威视摄像头RTSP使用nginx推流到服务器直播教程

思路&#xff1a; 之前2020年在本科的时候&#xff0c;由于项目的需求需要将海康威视的摄像头使用推流服务器到网页进行直播。这里将自己半个月琢磨出来的步骤给大家发一些。切勿转载&#xff01;&#xff01;&#xff01;&#xff01; 使用网络摄像头中的rtsp协议---------通…

CentOS 7.9下安装Docker

一、安装docker前的准备工作 操作系统版本为centos 7.9&#xff0c;内核版本需要在3.10以上&#xff0c;需要保障能够连通互联网&#xff0c;为了避免安装过程中出现网络异常建议关闭linux的防火墙&#xff08;生产环境下不要关闭防火墙&#xff0c;可根据实际情况设置防火墙出…

路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)

近期因公司新办公区建设&#xff0c;原有的爱快路由器的SDWAN功能实现分支之间互联的服务还需要继续使用。在原有的小型网络中&#xff0c;使用的爱快路由器当作网关设备&#xff0c;所以使用较为简单,如下图所示。 现变更网络拓扑为三层网络架构&#xff0c;但原有的SDWAN分支…