时间:2023-11-01来源:系统城装机大师作者:佚名
今天分享一次Redis引发的线上事故,避免再次踩雷,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。
一个命令损失数百万,这,需要赔偿吗?
代码不规范,同事两行泪,撸码需谨慎!
处于好奇考虑,我来测试一下,这到底是什么问题?
写入1000万数据。
1 | for ((i=1;i<=10000000;i++)); do echo "set k$i 哪吒编程$i" >> /tmp/test1 .txt; done ; |
通过/tmp/test1.txt
查看一下是否写入成功。
1 | cat /tmp/test1 .txt | redis-cli -a 111111 --pipe |
在redis.conf文件中配置security:
1 2 3 |
rename- command keys "" rename- command flushdb "" rename- command flushall "" |
Redis Scan 命令用于迭代数据库中的数据库键。
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
scan语法:
1 | SCAN cursor [MATCH pattern] [COUNT count] |
阿里云Redis开发规范中明确规定“拒绝bigkey(防止网卡流量、慢查询)”
。
String类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
Hash 删除: hscan+hdel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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)通过redis-cli --bigkeys
查找。
(2)计算每个键值的字节数,通过memory usage key查找
到此这篇关于关于Redis bigkeys命令会阻塞问题的解决的文章就介绍到这了
2023-11-01
浅谈一下如何保证Redis缓存与数据库的一致性2023-11-01
图解Redis主从复制与Redis哨兵机制2023-11-01
Redis分布式锁的实现方式一、单点Redis的问题 二、RDB 三、AOF 四、Redis优化秒杀流程 1、秒杀步骤: 2、Redis优化秒杀步骤: 3、秒杀的lua脚本 4、调用秒杀的lua脚本 5、通过线程池,操作阻塞队列 五、基于Redis实现共享session登录 基于session...
2023-11-01
一、RDB(Redis Data Base) 1.1、配置文件 1.2、操作步骤 1.3、数据丢失演示 1.4、检查dump.rdb文件是否损坏 1.5、禁用RDB快照...
2023-11-01