如何通过Redisson客户端通过RMap检查Redis中是否已经存在该值?

问题描述

我是 Redisson 的新手,在基本操作方面遇到了问题。 我正在尝试查看 Hashmap 中特定键下的值是否已经存在于底层 Redis 存储中并返回它。 我一定是在使用 Redisson API 做错了什么。

这是我正在做的:

    public Optional<Double> getMetricEntryValue(String metricKey,String metricDataEntryKey) {
        RMap<String,Double> metricDataMap = redissonClient.getMap(metricKey,MapOptions.defaults());
        metricDataMap.loadAll(ImmutableSet.of(metricDataEntryKey),true,1);
        return Optional.ofNullable(metricDataMap.get(metricDataEntryKey));
    }

这是我收到的错误

2021-07-14 12:09:14,943 [,] ERROR [redisson-3-1] RedissonMap$4 - Unable to load value by key 2021-07-14:CO:12 for map fts-alert:partner-submitted-apps
java.lang.NullPointerException: null
    at org.redisson.RedissonMap$4.run(RedissonMap.java:1256) [redisson-3.12.5.jar:3.12.5]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_212]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_212]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.48.Final.jar:4.1.48.Final]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]

有什么想法吗?

解决方法

事实证明是我想多了这个问题。调用:

metricDataMap.loadAll(ImmutableSet.of(metricDataEntryKey),true,1);

对于这个简单的操作来说是不必要的。

这有效:

RMap<String,Double> metricDataMap = redissonClient.
     getMap(metricKey,MapOptions.defaults());
return Optional.ofNullable(metricDataMap.get(metricDataEntryKey));