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和 ...
随机推荐
- css3 vw -----解决页面滚动出现跳动的bug
100vw相对于浏览器的window.innerWidth,是浏览器的内部宽度,注意,滚动条宽度也计算在内!而100%是可用宽度,是不含滚动条的宽度. demo: h1{font-size:8vw;} ...
- bzoj4390
树上差分 感觉挺巧妙的... 每次更新就是在u,v上+1,x是lca(u,v),在x和fa[x]上-1,那么每个点的权值就是子树和,正确性yy一下就行了 不过树状数组的常数真是小,改成前缀和才快了20 ...
- HDU1452:Happy 2004(积性函数)(因子和)
题意 给出\(x\),求\(2004^x\)的所有因子和 分析 \(2004=2*2*3*167\) 则\(2004^x\)=\(2^{2x}*3^x*167^x\) s[\(2004^x\)]=s[ ...
- 用set和shopt设置bash选项
1.set命令 -o打开选项,+o关闭选项#set -o //显示选项设置#set -o noclobber //打开该选项,重定向将覆盖已存在的文件#set +o noclobber //关闭该选项 ...
- 洛谷 P1540 机器翻译(队列)
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- EditextText输入类型
android:inputType="none"--输入普通字符 android:inputType="text"--输入普通字符 android:inputT ...
- HDU 5558 后缀数组
思路: 这是一个错误的思路, 因为数据水才过= = 首先求出来后缀数组 把rank插到set里 每回差i两边离i近的rank值,更新 如果LCP相同,暴力左(右)继续更新sa的最小值 //By Sir ...
- 2017 JUST Programming Contest 3.0 I. Move Between Numbers
I. Move Between Numbers time limit per test 2.0 s memory limit per test 256 MB input standard input ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
以后每做完一场CF,解题报告都写在一起吧 暴力||二分 A - Bear and Elections 题意:有n个候选人,第一个候选人可以贿赂其他人拿到他们的票,问最少要贿赂多少张票第一个人才能赢 ...
- 数论+DP HDOJ 4345 Permutation
题目传送门 题意:一个置换群,经过最少k次置换后还原.问给一个N个元素,在所有的置换群里,有多少个不同的k. 分析:这道题可以转化成:N = Σ ai ,求LCM ( ai )有多少个不同的值.比如N ...