关于Redis?bigkeys命令会阻塞问题的解决(redis的keys)干货分享

随心笔谈2年前发布 编辑
163 0
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买



目录前言一、 顺丰高级开发工程师在线执行了 Redis 危险命令导致某公司损失 400 万二、测试一下1000万数据的性能1、编写脚本文件2、写入Redis1000万数据3、通过keys * 查看1000万数据4、通过配置文件禁止keys *的使用三、使用scan替代keys *四、拒绝bigkey1、阿里云Redis开发规范2、出现bigkey时如何删除?3、bigkey会造成哪些问题?4、如何发现bigkey?

今天分享一次Redis引发的线上事故,避免再次踩雷,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。

在这里插入图片描述

一个命令损失数百万,这,需要赔偿吗?

代码不规范,同事两行泪,撸码需谨慎!

处于好奇考虑,我来测试一下,这到底是什么问题?

写入1000万数据。

for((i=1;i<=10000000;i++)); do echo “set k$i 哪吒编程$i” >> /tmp/test1.txt;done;

通过查看一下是否写入成功。

在这里插入图片描述

cat /tmp/test1.txt | redis-cli -a 111111 –pipe

在这里插入图片描述

在这里插入图片描述

在redis.conf文件中配置security:

rename- command keys “”
rename- command flushdb “”
rename- command flushall “”

Redis Scan 命令用于迭代数据库中的数据库键。

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

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

scan语法:

SCAN cursor [MATCH pattern] [COUNT count]

在这里插入图片描述

阿里云Redis开发规范中明确规定。

String类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。

String类型的用del删除。其它类型使用hscan、sscan、zscan方式渐进式删除,同时要避免bigkey过期时间自动删除问题,因为它会造成主线程阻塞。

Hash 删除: hscan+hdel

public void delBigHash(String host, int port, String password, String bigHashKey) {
Jedis jedis=new Jedis(host, port);
if (password !=null && !””.equals(password)) {
jedis.auth(password);
}
ScanParams scanParams=new ScanParams().count(100);
String cursor=”0″;
do {
ScanResult<Entry<String, String>> scanResult=jedis.hscan(bigHashKey, cursor, scanParams);
List<Entry<String, String>> entryList=scanResult.getResult();
if (entryList !=null && !entryList.isEmpty()) {
for (Entry<String, String> entry : entryList) {
jedis.hdel(bigHashKey, entry.getKey());
}
}
cursor=scanResult.getStringCursor();
} while (!”0″.equals(cursor));

//删除 bigkey
jedis.del(bigHashKey);
}

内存不均,集群迁移困难;超时删除,阻塞线程;网络流量阻塞;

(1)通过查找。

在这里插入图片描述

(2)计算每个键值的字节数,通过memory usage key查找

在这里插入图片描述

到此这篇关于关于Redis bigkeys命令会阻塞问题的解决的文章就介绍到这了,更多相关Redis bigkeys命令阻塞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Redis中的BigKey问题排查与解决思路详解redis的bigkey扫描脚本深入介绍Redis?BigKey的问题解决

© 版权声明

相关文章