1. 程式人生 > >Spring Redis(4)物件Hash對映

Spring Redis(4)物件Hash對映

Hash mapping

使用Redis的hash結構儲存物件有以下三種方式
1. 使用HashOperations和序列化(見上一節)
2. 使用Redis持久化(推薦,見後續章節)
3. 使用HashMapper和HashOperations

這裡主要介紹第三種方式
HashMapper將物件與Map

ObjectHashMapper

@Repository("hashMapping")
public class HashMapping {

    @Resource(name = "redisTemplate")
    HashOperations<String, byte
[], byte[]> hashOperations; HashMapper<Object, byte[], byte[]> mapper = new ObjectHashMapper(); public <T> void writeHash(String key, T obj) { Map<byte[], byte[]> mappedHash = mapper.toHash(obj); hashOperations.putAll(key, mappedHash); } @SuppressWarnings
("unchecked") public <T> T loadHash(String key) { Map<byte[], byte[]> loadedHash = hashOperations.entries(key); return (T) mapper.fromHash(loadedHash); } }

測試方法

    @Autowired
    HashMapping hashMapping;

    @Test
    public void testHashMapping() {
        String key = "SerializedRedisTemplateTest:TEST:hashMapping:1"
; Student stu1 = new Student("1", 1); hashMapping.writeHash(key, stu1); Student result = hashMapping.loadHash(key); Assert.assertEquals(stu1,result); }

Jackson2HashMapper

Jackson2HashMapper支援普通對映和扁平對映兩種方式。
對於型別



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

public class Address {
  String city;
  String country;
}

普通對映結果為

Hash Field Value
firstname Jon
lastname Snow
address { “city” : “Castle Black”, “country” : “The North” }

扁平對映結果為

Hash Field Value
firstname Jon
lastname Snow
address.city Castle Black
address.country The North

扁平對映需要所有屬性名稱不含影響到JSON路徑。 因此不支援在Map的key或屬性名中使用點號和括號。