【问题标题】:Equivalent of redis-cli MEMORY USAGE <key> in Spring Boot using redisTemplate使用 redisTemplate 在 Spring Boot 中等效于 redis-cli MEMORY USAGE <key>
【发布时间】:2021-03-27 07:07:09
【问题描述】:

我目前正在尝试在我的 Spring Boot 应用程序中监控嵌入式 Redis 使用的内存。我找到了使用 RedisTemplate 的“info memory”命令的等价物,提供了一般的内存使用信息。但是,它没有找到一种方法来获得与密钥相关的更具体的内存使用信息,这相当于使用命令 MEMORY USGAE 和 redis-cli。有没有办法使用 RedisTemplate 以编程方式获取这些信息?

我的桌面本地没有安装redis,我也没有权限自己安装,所以我必须使用嵌入式redis。

最好的问候,

【问题讨论】:

    标签: java spring-boot redis spring-data-redis


    【解决方案1】:

    RedisTemplate 没有这个API,可以使用EVAL 命令获取这个的输出。

    键和脚本

    String script = "return redis.pcall('MEMORY', 'USAGE', KEYS[1])";
    String key = "test";
    

    简单使用 RedisConnectionUtils

        RedisConnection redisConnection =
            RedisConnectionUtils.getConnection(redisTemplate.getConnectionFactory());
        
        System.out.println(
            (Long)
                (redisConnection.eval(
                    script.getBytes(StandardCharsets.UTF_8),
                    ReturnType.INTEGER,
                    1,
                    key.getBytes(StandardCharsets.UTF_8))));
         RedisConnectionUtils.releaseConnection(
            redisConnection, redisTemplate.getConnectionFactory());
    

    使用管道获得相同的结果。

    System.out.println(
            redisTemplate
                .executePipelined(
                    (RedisCallback<Object>)
                        connection -> {
                          connection.eval(
                              script.getBytes(StandardCharsets.UTF_8),
                              ReturnType.INTEGER,
                              1,
                              jobsKey.getBytes(StandardCharsets.UTF_8));
                          return null;
                        })
                .get(0));
    

    【讨论】:

    • 您使用哪个版本的 Spring ?当我尝试执行命令时,我得到了一个未知的脚本异常。我使用 Spring Boot 2.2.8 和 Spring Data Moore-SR8。
    • 你能在 pastebin 上分享完整的堆栈跟踪吗?我正在使用 spring 2.1.x。
    • @MatJeg 你错过了在代码中添加String script = "return redis.pcall('MEMORY', 'USAGE', KEYS[1])"; 吗?
    • 我添加了脚本,我有以下异常:redis.clients.jedis.exceptions.JedisDataException : @user_script: 1: Unknown Redis command called from Lua script
    • 看看你的Redis服务器是否支持这个命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2020-04-19
    相关资源
    最近更新 更多