【问题标题】:Map an object to a hash with Spring Data Redis使用 Spring Data Redis 将对象映射到哈希
【发布时间】:2023-03-07 17:00:01
【问题描述】:

假设我有一个用户类

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 可能是帮助。但是没有关于如何准确使用这个映射器的文章/文档。

有没有其他人遇到过类似的情况?

【问题讨论】:

  • 您刚刚删除的stackoverflow.com/q/48294485/6309 的答案是什么?
  • @VonC 原来你应该避免在 nginx 中设置标题“X-Artifactory-Override-Base-Url”
  • 太棒了!将其添加为答案并接受它会帮助其他有同样问题的人;)

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


【解决方案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);
    }

}

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 2018-12-04
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多