我使用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)
来自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)
归档时间: |
|
查看次数: |
12136 次 |
最近记录: |