Spring Redis(4)物件Hash對映
阿新 • • 發佈:2019-01-28
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或屬性名中使用點號和括號。