BigKey的危害

1.2.1、BigKey的危害
  • 网络阻塞
    • 对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例,乃至所在物理机变慢
  • 数据倾斜
    • BigKey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡
  • Redis阻塞
    • 对元素较多的hash、list、zset等做运算会耗时较旧,使主线程被阻塞
  • CPU压力
    • 对BigKey的数据序列化和反序列化会导致CPU的使用率飙升,影响Redis实例和本机其它应用
1.2.2、如何发现BigKey
①redis-cli --bigkeys

利用redis-cli提供的–bigkeys参数,可以遍历分析所有key,并返回Key的整体统计信息与每个数据的Top1的big key

命令:redis-cli -a 密码 --bigkeys

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

②scan扫描

自己编程,利用scan扫描Redis中的所有key,利用strlen、hlen等命令判断key的长度(此处不建议使用MEMORY USAGE)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

scan 命令调用完后每次会返回2个元素,第一个是下一次迭代的光标,第一次光标会设置为0,当最后一次scan 返回的光标等于0时,表示整个scan遍历结束了,第二个返回的是List,一个匹配的key的数组

import com.heima.jedis.util.JedisConnectionFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanResult;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JedisTest {
    private Jedis jedis;

    @BeforeEach
    void setUp() {
        // 1.建立连接
        // jedis = new Jedis("192.168.150.101", 6379);
        jedis = JedisConnectionFactory.getJedis();
        // 2.设置密码
        jedis.auth("123321");
        // 3.选择库
        jedis.select(0);
    }

    final static int STR_MAX_LEN = 10 * 1024;
    final static int HASH_MAX_LEN = 500;

    @Test
    void testScan() {
        int maxLen = 0;
        long len = 0;

        String cursor = "0";
        do {
            // 扫描并获取一部分key
            ScanResult<String> result = jedis.scan(cursor);
            // 记录cursor
            cursor = result.getCursor();
            List<String> list = result.getResult();
            if (list == null || list.isEmpty()) {
                break;
            }
            // 遍历
            for (String key : list) {
                // 判断key的类型
                String type = jedis.type(key);
                switch (type) {
                    case "string":
                        len = jedis.strlen(key);
                        maxLen = STR_MAX_LEN;
                        break;
                    case "hash":
                        len = jedis.hlen(key);
                        maxLen = HASH_MAX_LEN;
                        break;
                    case "list":
                        len = jedis.llen(key);
                        maxLen = HASH_MAX_LEN;
                        break;
                    case "set":
                        len = jedis.scard(key);
                        maxLen = HASH_MAX_LEN;
                        break;
                    case "zset":
                        len = jedis.zcard(key);
                        maxLen = HASH_MAX_LEN;
                        break;
                    default:
                        break;
                }
                if (len >= maxLen) {
                    System.out.printf("Found big key : %s, type: %s, length or size: %d %n", key, type, len);
                }
            }
        } while (!cursor.equals("0"));
    }
    
    @AfterEach
    void tearDown() {
        if (jedis != null) {
            jedis.close();
        }
    }

}

相关推荐

  1. SQL注入危害和原理

    2024-05-03 02:46:03       11 阅读
  2. 危害以及含铍废水处理

    2024-05-03 02:46:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 02:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 02:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 02:46:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 02:46:03       20 阅读

热门阅读

  1. python 如何判断是函数还是方法 (function or method)

    2024-05-03 02:46:03       11 阅读
  2. windows版本的epoll

    2024-05-03 02:46:03       13 阅读
  3. 全面解析Unity至Unreal的项目迁移流程

    2024-05-03 02:46:03       13 阅读
  4. 常用的路径抽稀算法

    2024-05-03 02:46:03       10 阅读
  5. npm一篇通

    2024-05-03 02:46:03       13 阅读
  6. UML图(总结)

    2024-05-03 02:46:03       12 阅读
  7. WPF之ToolTip提示

    2024-05-03 02:46:03       16 阅读
  8. sklearn和torch计算的r2 score不一样

    2024-05-03 02:46:03       14 阅读
  9. asp爬虫代码简单示例

    2024-05-03 02:46:03       10 阅读
  10. [AI OpenAI-doc] 文件搜索 Beta

    2024-05-03 02:46:03       16 阅读
  11. Github2024-04-28php开源项目日报Top9

    2024-05-03 02:46:03       12 阅读
  12. Microsoft.NET 框架程序设计 —— 类型基础

    2024-05-03 02:46:03       12 阅读
  13. 长亭安全运营实习一面

    2024-05-03 02:46:03       13 阅读
  14. C语言如何将指针数组作为函教的参教?

    2024-05-03 02:46:03       10 阅读