如何使用Spring Data Redis for Hash使用自定义转换器和流水线操作

问题描述 投票:0回答:1

如果我有以下对象,我将其作为哈希存储在redis中

@RedisHash("animals")
public class Animal implements Serializable {
    private static final long serialVersionUID = 5905326889964459171L;
    @Id
    private String id;
    @Indexed
    private String type;
    @Indexed
    private String location;

如果在smembers animals:type:animal01有1000个条目,我想 - “在所有地点找到动物类型的动物01”那么我正在做 -

Set<String> members = stringRedisTemplate.opsForHash().members("animals:type:animal01");
List<Object> result = stringRedisTemplate.executePipelined(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                for (String member : members) {
                    connection.hGetAll(String.format("animals:%s", member).getBytes());
                }
                return null;
            }
        });

“result”中的每个对象都是LinkedHashMap类型。我曾尝试使用org.springframework.data.redis.hash.ObjectHashMapper将其转换为Animal,但似乎ObjectHashMapper仅适用于Map。我无法使用Map

(我正在使用spring-boot-starter-data-redis 1.5.14.RELEASE,它引入了jedis2.9.0)

如何反序化流水线结果?

java-8 spring-data-redis
1个回答
0
投票

而不是hGetAll,我做了hMGet。在这种情况下,结果中的每个对象都是List。然后我反序列化列表中的每个项目。它为我解决了

但我希望有一个更好的方法,spring-redis处理反序列化部分

© www.soinside.com 2019 - 2024. All rights reserved.