开发者

深入理解Redis BigKey

开发者 https://www.devze.com 2025-03-17 11:06 出处:网络 作者: 潜水的码不二
目录MoreKey大批量往Redis里面插入2000W测试数据keyBigKey多大算Big编程BigKey生产调优MoreKey
目录
  • MoreKey
    • 大批量往Redis里面插入2000W测试数据key
  • BigKey
    • 多大算Big编程
    • BigKey生产调优

MoreKey

大批量往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

深入理解Redis BigKey

尝试keys * 花费时间

深入理解Redis BigKey

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

深入理解Redis BigKey

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

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

深入理解Redis BigKey

深入理解Redis BigKey

SCAN命令

1.语法

深入理解Redis BigKey

​ 2.特点

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

SCAN cursor [MATCH pattern] [COUNT count]

​ cursor -游标

​ pattern -匹配的模式

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

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

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

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

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

SCAN的遍历顺序

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

​ 3.使用

深入理解Redis BigKey

BigKey

多大算Big

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

深入理解Redis BigKey

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多亿个成员)。

​ …

危害

1javascript.内存不均www.devze.com,集群迁移困难

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

3.网络流量阻塞

找出BigKey

redis-cli --bigkeys

好处

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

不足

想查询大于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 –-bijsgkeys -i 0.1

深入理解Redis BigKey

MEMORY USAGE 键

深入理解Redis BigKey

如何删除

深入理解Redis BigKey

String

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

hash

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

深入理解Redis BigKey

深入理解Redis BigKey

list

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

深入理解Redis BigKey

深入理解Redis BigKey

set

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

深入理解Redis BigKey

Zset

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

深入理解Redis BigKey

BigKey生产调优

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

阻塞和非阻塞删除命令

深入理解Redis BigKey

优化配置

深入理解Redis BigKey

到此这篇关于深入理解Redis BigKey的文章就介绍到这了,更多相关Redis BigKey内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号