zoukankan      html  css  js  c++  java
  • 导致Redis访问慢的常见操作

    导致Redis访问慢的原因通常有2个方面:
    第一,Redis本身性能出现了瓶颈,如:内存使用率过高,并发过大等
    第二,存在大KEY,或者客户端访问命令使用不当引起的阻塞

    在此,只列举因为的客户端命令使用不当导致访问Redis慢的操作,表现出来的现象就是:某些接口的访问耗时不稳定,时好时坏。

    无序集合“SMEMBERS”命令

    当无序集合(SET)中的元素个数很多时,使用“SMEMBERS”命令访问可能会引起Redis访问阻塞。
    替代方案:使用SSCAN命令代替SMEMBERS命令。
    使用示例:

    // 使用SMEMBERS命令访问集合所有元素
    Set<String> set = redisTemplate.opsForSet().members(key);
    
    // 使用SSCAN命令访问集合所有元素
    Set<String> set = new HashSet<>();
    Cursor<String> cursor = this.redisTemplate.opsForSet().scan(key, ScanOptions.NONE);
    try {
        while (cursor.hasNext()) {
            String value = cursor.next();
            set.add(value)
        }
    } finally {
        try {
            cursor.close();
        } catch (Exception e) {}
    }
    

    哈希集合“HGETALL”命令

    当哈希集合(HASH)中的元素很多时,使用“HGETALL”命令获取所有元素可能会引起Redis访问阻塞。
    替代方案:使用HSCAN命令替代HGETALL命令。
    使用示例:

    // 使用HGETALL命令获取集合所有元素
    Map<String, Object> map = redisTemplate.opsForHash().entries(key);
    
    // 使用HSCAN命令访问集合所有元素
    Map<String, Object> map = new HashMap<>();
    Cursor<Map.Entry<String, Object>> cursor = redisTemplate.opsForHash().scan(key, ScanOptions.NONE);
    try {
        while (cursor.hasNext()) {
            Map.Entry<String, Object> entry = cursor.next();
            if (entry.getKey() == null || entry.getValue() == null) {
                continue;
            }
            map.put(entry.getKey(), entry.getValue());
        }
    } finally {
        try {
            cursor.close();
        } catch (Exception e) {}
    }
    

    【参考】
    http://kaito-kidd.com/2021/01/23/redis-slow-latency-analysis/ Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文
    http://xiaoyue26.github.io/2020/03/23/2020-03/redis大key问题/ redis大key问题


    作者:编程随笔
    出处:http://www.cnblogs.com/nuccch/
    声明:本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接。

  • 相关阅读:
    Cocos Creator脚本开发事例
    java调用sap的webservice(需要登录验证)
    Lua require 相对路径
    C++学习笔记
    Lua MD5加密字符串
    USE " cc.exports.* = value " INSTEAD OF SET GLOBAL VARIABLE"
    cocos2d-x学习笔记
    麻将胡牌算法研究
    Tomcat服务器配置https双向认证(使用keytool生成证书)
    MySQL密码忘了怎么办?MySQL重置root密码方法
  • 原文地址:https://www.cnblogs.com/nuccch/p/15776598.html
Copyright © 2011-2022 走看看