◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
从现在开始,努力学习吧!本文《关于Redis bigkeys命令会阻塞问题的解决》主要讲解了Redisbigkeys、命令阻塞等等相关知识点,我会在24分享网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!
一个命令损失数百万,这,需要赔偿吗?
代码不规范,同事两行泪,撸码需谨慎!
处于好奇考虑,我来测试一下,这到底是什么问题?
写入1000万数据。
for((i=1;i> /tmp/test1.txt;done;
通过/tmp/test1.txt
查看一下是否写入成功。
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开发规范中明确规定“拒绝bigkey(防止网卡流量、慢查询)”
。
String类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
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> scanResult = jedis.hscan(bigHashKey, cursor, scanParams); List > entryList = scanResult.getResult(); if (entryList != null && !entryList.isEmpty()) { for (Entry entry : entryList) { jedis.hdel(bigHashKey, entry.getKey()); } } cursor = scanResult.getStringCursor(); } while (!"0".equals(cursor)); //删除 bigkey jedis.del(bigHashKey); }
(1)通过redis-cli --bigkeys
查找。
(2)计算每个键值的字节数,通过memory usage key查找
到这里,我们也就讲完了《关于Redis bigkeys命令会阻塞问题的解决》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注the24.cn,带你了解更多关于redis的知识点!
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。