使用 Spring Data Redis 将对象映射到哈希
Posted
技术标签:
【中文标题】使用 Spring Data Redis 将对象映射到哈希【英文标题】:Map an object to a hash with Spring Data Redis 【发布时间】:2018-05-20 01:58:50 【问题描述】:假设我有一个用户类
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
可能是帮助。但是没有关于如何准确使用这个映射器的文章/文档。
有没有其他人遇到过类似的情况?
【问题讨论】:
您刚刚删除的***.com/q/48294485/6309 的答案是什么? @VonC 原来你应该避免在 nginx 中设置标题“X-Artifactory-Override-Base-Url” 太棒了!将其添加为答案并接受它会帮助其他有同样问题的人;) 【参考方案1】:我只是这样使用:
@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);
【讨论】:
以上是关于使用 Spring Data Redis 将对象映射到哈希的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Data 在 Redis 中查询嵌套对象
Spring 4 中 Websockets 的自定义对象映射器
Spring Data Redis Repository 支持不回读嵌入的复杂对象
Spring对象映射器covertValue方法不转换某些字段