java - 如何通过Java中的Jedis客户端从REDIS MGET检查空值

Posted

技术标签:

【中文标题】java - 如何通过Java中的Jedis客户端从REDIS MGET检查空值【英文标题】:How to check null value from REDIS MGET via Jedis client in java 【发布时间】:2022-01-15 00:16:36 【问题描述】:

我在 redis 中有一些键。我可以做一个 MGET 并获取值。但是当密钥不存在时,我会从 redis 得到一个 (nil) 。但是如何在 java 中检查呢?我正在检查 null 但它不起作用。

127.0.0.1:6379> MGET key1 key2 key3 key4
1) "Hello"
2) "World"
3) "Hi"
4) "Hi-World"
127.0.0.1:6379> MGET key1 key2 key3 key5 key4
1) "Hello"
2) "World"
3) "Hi"
4) (nil)
5) "Hi-World"
127.0.0.1:6379>

实际上,在我的 java 类中,我将 MGET 中的键列表和值列表映射到哈希映射中。在价值清单上,我正在做一些操作。在那里我需要进行空检查。但是简单的 java null 不起作用。

【问题讨论】:

您使用的是哪个 Jedis 版本?请添加您认为不起作用的最短可重现 Java 代码。 【参考方案1】:

您可以随时调用exists 来检查Redis 中是否存在密钥。要使用 java 检查,首先,创建一个客户端并调用相应的方法。

Jedis jedis = new Jedis(host, port);
List<String> values = jedis.mget(keys); //get all values for the given keys
values.removeAll(Collections.singletonList(null)); //remove all null values
if(jedis.exists(key))  //check if a particular key exists or not
     System.out.println(key + " exists");

【讨论】:

这是为了检查一个特定的键。同样在这种情况下,我需要遍历整个列表。我正在使用 mget 并获取列表并返回列表。在其他地方,我正在遍历列表并检查它是否为空。如何做到这一点。 我已经更新了我的答案。您可以在返回值之前删除所有空值 如果值完全为空,这将被删除。但它返回 (nil) 而不是 null 。有我的问题。我如何对此进行空检查。请在我的问题中查看 REDIS 的输出。 实际上我正在将键列表和值列表映射到哈希映射中。在价值清单上,我正在做一些操作。在那里我需要做一个空检查。 我刚刚在我的 PC 上再次运行了一些代码,如果我尝试通过 mget 获取 Redis 中不存在的一些值,它会在 java 中返回 null 而不是 nil .但它在控制台中显示 nil。【参考方案2】:

如果您将对象作为地图,那么您可以像这样访问它

System.out.println(redissonClient.getMap("object").get("key")==null);

【讨论】:

我没有使用 redisson

以上是关于java - 如何通过Java中的Jedis客户端从REDIS MGET检查空值的主要内容,如果未能解决你的问题,请参考以下文章

使用Java客户端对Redis进行操作

使用Redis的Java客户端Jedis

Java的Redis客户端Jedis

redis几种java客户端比较:jedisredissonlettuce

redis几种java客户端比较:jedisredissonlettuce

使用Jedis操作Redis-使用Java语言在客户端操作---对key的操作