RedisTemplate-哈希通过键集获取多个条目

use*_*741 4 spring redis

我使用spring的RedisTemplate。

我在Redis中有一个哈希。

我想使用模板查询redis,以获取其键在特定键集中的所有条目。

我注意到该方法:

Map<Object, Object> entries = redisTemplate.opsForHash().multiGet(HASH_NAME, keySet);
Run Code Online (Sandbox Code Playgroud)

但是,不幸的是,此方法仅返回值,而没有匹配键。

我也可以这样:

Map<Object, Object> entries = redisTemplate.opsForHash().entries(HASH_NAME);
for(Object key : keySet){
    System.out.println(entries.get(key));
}
Run Code Online (Sandbox Code Playgroud)

但这意味着我将把所有条目从redis获取到我的本地计算机,并对它们进行迭代。

我没有更好的方法吗?

小智 5

如果您使用的是RedisTemplate,则可以opsForHash().entries(H key)用来获取所有哈希(键和值)。

例如...

Map messageGroupMetadata = redisTemplate.opsForHash().entries(H key);
Run Code Online (Sandbox Code Playgroud)

除此之外,还需要设置RedisTemplate序列化程序来完成此操作。

redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
Run Code Online (Sandbox Code Playgroud)


aru*_*run 4

来自HMGET的文档:

数组回复:与给定字段关联的值列表,其顺序与请求的顺序相同。

从Spring Redis Hash multiGet的文档中,您可以看到它返回一个列表(而不是映射),该列表应该与您发送的键的顺序相同。

示例代码:

List<Object> values = redisTemplate.opsForHash().multiGet(HASH_NAME, keySet);
int i = 0;
for (String k: keySet) {
    // k is the key
    // and here is the value corresponding to the key k
    Object value = values.get(i++);
}
Run Code Online (Sandbox Code Playgroud)