Spring Data Redis入门示例:Hash操作(七)
将对象存为Redis中的hash类型,可以有两种方式,将每个对象实例作为一个hash进行存储,则实例的每个属性作为hash的field;同种类型的对象实例存储为一个hash,每个实例分配一个field,将对象序列化后,作为该field的值;
假设有Person类:
public class Person {
private String name;
private String age;
……
}
第一种方式存储的结果为:

第二种方式存储的结果为:

因此,Spring Data Redis处理hash类型数据一般有两种策略:
- 使用
HashOperations和Json序列化器直接映射 - 使用
HashMapper和HashOperations
实例代码如下:
@Autowired
private RedisTemplate template;
@Resource(name = "redisTemplate")
private HashOperations<String, String, Object> hashOps;
public void test(){
// 使用HashOperations和json序列化器,存储hash
Map<String, String> map = new HashMap<String, String>();
map.put("name", "wangdh");
map.put("age", "26");
// 会将map进行json序列化,存储为field为1,对应的值
hashOps.put("person", "1", map);
// 使用HashMapper和HashOperations,存储hash
// 存储的数据会多出一个键:@class,标识序列化的类型
HashMapper<Object, String, Object> mapper = new Jackson2HashMapper(false);
Map<String, Object> mappedHash = mapper.toHash(map);
hashOps.putAll("person2",mappedHash);
// 直接将map作为hash存储
hashOps.putAll("person3",map);
}
HashMappers
HashMappers使对象和Map <K,V>进行相互转换,有多种默认的实现方式可供使用:
- 基于
Spring’s BeanUtils的BeanUtilsHashMapper - 使用
Object to Hash Mapping的ObjectHashMapper(使用JDK序列化器) - 使用
FasterXML Jackson的Jackson2HashMapper(常用,使用Json序列化器)
Jackson2HashMapper可以将数据顶级属性映射为哈希字段名称,并可选地将结构展平。
简单的类型映射到简单的值。复杂类型(嵌套对象,集合,映射)表示为嵌套JSON。
展平会为所有嵌套属性创建单独的哈希条目,并尽可能将复杂类型解析为简单类型。
展开的形式:
{
"firstname":"Jon",
"lastname":"Snow",
"address.city":"Castle Black",
"address.country":"The North"
}
不展平的形式:
{
"firstname":"Jon",
"lastname":"Snow",
"address":
{
"city" : "Castle Black",
"country" : "The North"
}
}
Spring Data Redis入门示例:Hash操作(七)的更多相关文章
- Spring Data Redis入门示例:字符串操作(六)
Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 ...
- Spring Data Redis入门示例:基于Jedis及底层API (二)
使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...
- Spring Data Redis入门示例:数据序列化 (四)
概述 RedisTemplate默认使用的是基于JDK的序列化器,所以存储在Redis的数据如果不经过相应的反序列化,看到的结果是这个样子的: 可以看到,出现了乱码,在程序层面上,不会影响程序的运行, ...
- Spring Data Redis入门示例:基于RedisTemplate (三)
使用底层API:RedisConnection操作Redis,需要对数据进行手动转换(String <---->byte),需要进行多数重复性工作,效率低下:org.springframe ...
- Spring Data Redis入门示例:程序配置(五)
单机配置 redis.properties配置 #redis的服务器地址 redis.host=127.0.0.1 #redis的服务端口 redis.port=6379 #客户端超时时间单位是毫秒 ...
- spring data redis使用示例
1. 配置依赖文件 <dependencies> <dependency> <groupId>org.springframework.data</groupI ...
- Spring data redis的一个bug
起因 前两天上线了一个新功能,导致线上业务的缓存总是无法更新,报错也是非常奇怪,redis.clients.jedis.exceptions.JedisConnectionException: Unk ...
- Spring Data Redis —— 快速入门
环境要求:Redis 2.6及以上,javase 8.0及以上: 一.Spring Data Redis 介绍 Spring-data-redis是spring的一部分,提供了在srping应用中通过 ...
- Spring Boot使用Spring Data Redis操作Redis(单机/集群)
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...
随机推荐
- snnu1120: 划分数(DP计数问题)
1120: 划分数 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 6 Solved: 3[Submit][Status][Web Board] Des ...
- snnu1111(子序列求和)
1111: 子序列求和 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 10 Solved: 2[Submit][Status][Web Board] [ ...
- 2.jeesite增删改查
一.准备数据 在数据库中中添加一张表和数据,以mysql为例 SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------- ...
- HDU1244:Max Sum Plus Plus Plus
题目链接:Max Sum Plus Plus Plus 题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠 分析:见代码 //dp[i][j]表示前i个数取了j段的最大值 //状态转移: ...
- poj 2396 Budget【有上下界的网络流】
第一步:建立无源汇有上下界的网络模型 每行 i 作为一个点并连边(s, i, Ri, Ri),每列 j 作为一个点并连边(j, t, Cj, Cj),设 Uij, Lij 分别表示第 i 行第 j 列 ...
- Luogu P1396 营救【最小生成树/二分答案/最短路】 By celur925
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...
- 安装使用electron辛路历程
安装使用electron辛路历程 成功安装electron以及成功使用第一个应用,整整花费了我一整天的时间,各种百度,各种尝试.最终,终于总结了一个亲测可行的终极可执行方案: electron 简单介 ...
- BZOJ2006 超级钢琴
Description 给定一个长度为n的区间,询问前k大的区间和,区间长度\(\in [L, R]\). $ n, k <= 500000$ Solution 首先求前缀和.把一个区间 ...
- ACM_回文素数
回文素数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 131号是一个主回文,因为它是一个素数和一个回文(当向后读时,它是相同的 ...
- Oracle 用到的服务
1.Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume ShadowCopy Service)能够让存储基础设备(比如磁盘,阵列等)创建 ...