使用Spring Data Redis

时间:2017-12-06 08:38:53

标签: spring-boot spring-data spring-cloud spring-data-redis

说我有一个用户类

class User {
    private Long id
    private String username
    private String password
}

我阅读了一些关于使用散列中的redis存储存储库的文章/教程。

然而,他们都有一个关键用于整个“表”,放入redis的内容如下:

user 1 {id:1,username:'',password:''}
user 2 {id:1,username:'',password:''}

在这种情况下,他们都idhash key

我想要实现的是将每个field用作hash key,如下所示:

user:1 id 1
user:1 username ''
user:1 password ''

经过大量的搜索,我发现Jackson2HashMapper可能是帮助。但是没有关于如何准确使用这个映射器的文章/文档。

还有其他人遇到类似情况吗?

1 个答案:

答案 0 :(得分:2)

我只是这样使用:

@Bean
public HashMapper<Object, byte[], byte[]> hashMapper() {
    return new ObjectHashMapper();
}

@Component
public class HashMapping<T> {
    @NonNull
    private StringRedisTemplate                stringRedisTemplate;
    @NonNull
    private HashMapper<Object, byte[], byte[]> hashMapper;

    public void writeHash(String key, T t) {
        checkNotNull(key, "hash key cannot be null");
        checkNotNull(t, "hash value cannot be null");
        stringRedisTemplate.execute((RedisCallback<Void>) connection -> {
            Map<byte[], byte[]> mappedHash = hashMapper.toHash(t);
            connection.hMSet(key.getBytes(), mappedHash);
            return null;
        });
    }

    public T loadHash(String key) {
        checkNotNull(key, "hash key cannot be null");
        Map<byte[], byte[]> loadedHash = 
stringRedisTemplate.getConnectionFactory()
                .getConnection().hGetAll(key.getBytes());
        return (T) hashMapper.fromHash(loadedHash);
    }

}