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和 ...
随机推荐
- 在datagrid中,IE浏览器报错:SCRIPT5007: 无法获取属性“rowspan”的值: 对象为 null 或未定义
项目总采用datagird时,产生界面如下图原本标题上有功能按钮,此时消失 错误:SCRIPT5007: 无法获取属性"rowspan"的值: 对象为 null 或未定义, 造 ...
- css3 混合模式mix-blend-mode background-blend-mode 以及混合模式的隔断 isolation
css 混合模式 mix-blend-mode: 让 元素内容 和 这个元素 以及 下面的元素 发生混合 background-blend-mode 背景的混合模式 可以是背景图片的混合也可以是背景图 ...
- ChartCtrl源码剖析之——CChartTitle类
CChartTitle类顾名思义,该类用来绘制波形控件的标题,它处于该控件的区域,如下图所示: CChartTitle类的头文件. #if !defined(AFX_CHARTTITLE_H__499 ...
- asp.net mvc razer
Asp.net MVC Razor模板引擎技巧分享 http://www.cnblogs.com/JustRun1983/p/3545303.html 全新的membership框架Asp.net I ...
- elasticsearch全文搜索
1.创建索引 PUT 192.168.100.102:9200/news 2.创建mapping POST 192.168.100.102:9200/news/new/_mapping { " ...
- git修改push的注释信息
修改还未push的注释: git commit --amend 修改后保存退出. 刚刚push到远端还没有人其他人下载或改动的: git commit --amend进入修改页面修改注释信息,修改后: ...
- 模拟+贪心 SCU 4445 Right turn
题目传送门 /* 题意:从原点出发,四个方向,碰到一个点向右转,问多少次才能走出,若不能输出-1 模拟:碰到的点横坐标相等或纵坐标相等,然而要先满足碰到点最近, 当没有转向或走到之前走过的点结束循环. ...
- urllib的高级用法
Handler简介 我们可以把他理解为各种处理器,有专门处理登录验证的,有处理cookies的,有处理代理设置的.利用他们,我们几乎可以做到HTTP请求中的所有事情. 首先,介绍一下 urllib.r ...
- D. Dasha and Very Difficult Problem 二分
http://codeforces.com/contest/761/problem/D c[i] = b[i] - a[i],而且b[]和a[]都属于[L, R] 现在给出a[i]原数组和c[i]的相 ...
- [转]C#委托Action、Action<T>、Func<T>、Predicate<T>
CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...