说我有一个用户类
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:''}
在这种情况下,他们都id
为hash key
。
我想要实现的是将每个field
用作hash key
,如下所示:
user:1 id 1
user:1 username ''
user:1 password ''
经过大量的搜索,我发现Jackson2HashMapper
可能是帮助。但是没有关于如何准确使用这个映射器的文章/文档。
还有其他人遇到类似情况吗?
答案 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);
}
}