Spring Data Redis(Hash mapping)

Hash mapping 哈希映射

在Redis中可以使用多种数据结构类存储数据。前面章节已经学到了关于使用Jackson2JsonRedisSerializer 将objects 转换为JSON格式。JSON能被理想的作为values 来存储,使用一个简单无格式的keys。复杂的objects对象结构可以使用Redis 的Hashes 来存储。Spring Data Redis提供了多种数据映射到hashes 的策略,各个策略的使用取决于使用案例。

1.Direct mapping using HashOperations and a serializer
2.Using Redis Repositories
3.Using HashMapper and HashOperations

1. Hash mappers

Hash mappers是一个转换器,可以 将 map objects 和 Map<K, V>进行相互转换;HashMapper的目的就是使用Redis Hashes。

大多数实现都是有效的、拿来就可以用的:

1.BeanUtilsHashMapper using Spring’s BeanUtils.
2.ObjectHashMapper using Object to Hash Mapping.
3.Jackson2HashMapper using FasterXML Jackson.

示例代码如下:

public class Person {
  String firstname;
  String lastname;

  // …
}

public class HashMapping {

  @Autowired
  HashOperations<String, byte[], byte[]> hashOperations;

  HashMapper<Object, byte[], byte[]> mapper = new ObjectHashMapper();

  public void writeHash(String key, Person person) {

    Map<byte[], byte[]> mappedHash = mapper.toHash(person);
    hashOperations.putAll(key, mappedHash);
  }

  public Person loadHash(String key) {

    Map<byte[], byte[]> loadedHash = hashOperations.entries("key");
    return (Person) mapper.fromHash(loadedHash);
  }
}

2. Jackson2HashMapper

Jackson2HashMapper 使用 FasterXML Jackson提供了 Redis Hash到领域对象之间的映射。Jackson2HashMapper 能映射数据映射,将最高阶层的属性作为Hash域的名字,很随意的就将结构扁平化了。简单类型映射成简单的values。复杂类型(嵌套的objects、collections、maps)会展现成嵌套的JSON。

扁平化将特别的hash 实体转换为嵌套的属性内容,尽可能的将复杂的类型分解为简单的类型。

代码示例如下:

public class Person {
  String firstname;
  String lastname;
  Address address;
}

public class Address {
  String city;
  String country;
}

objects转换为JSON后的展示:

这里写图片描述

扁平化要求所有的属性名字不要和JSON的路径有冲突。在进行扁平化时,在map keys中或属性的名字中使用圆点或方括号是不行,不被支持的,违规使用则将导致hash 无法转换回 Object。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值