Spring-data-redis: serializer实例

     spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:

  • JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储
  • StringRedisSerializer:字符串编码,数据以string存储
  • JacksonJsonRedisSerializer:json格式存储
  • OxmSerializer:xml格式存储

    其中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的序列化策略,其中“JacksonJsonRedisSerializer”与“OxmSerializer”都是基于stirng存储,因此它们是较为“高级”的序列化(最终还是使用string解析以及构建java对象)。

    RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”:

    1) keySerializer :对于普通K-V操作时,key采取的序列化策略
    2) valueSerializer:value采取的序列化策略
    3) hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
    4) hashValueSerializer:hash-value的序列化策略

    无论如何,建议key/hashKey采用StringRedisSerializer。

    接下来,通过实例描述如何使用它们,可以首先参考“spring-data-redis特性”:

 

一. JdkSerializationRedisSerializer/StringRedisSerializer

    1) spring配置文件

<bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
	<property name="connectionFactory" ref="jedisConnectionFactory"></property>
	<property name="keySerializer">
		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
	</property>
	<property name="hashKeySerializer">
		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
	</property>
	<property name="valueSerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
	</property>
	<property name="hashValueSerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
	</property>
</bean>

    2) 程序实例:

ValueOperations<String, User> valueOper = redisTemplate.opsForValue();
User user = new User("zhangsan",12);
valueOper.set("user:1", user);
System.out.println(valueOper.get("user:1").getName());

    其中User为pojo类,且需要实现Serializable接口。

 

二.sdr与json

    1) spring配置:

<bean id="jsonSerializer" class="com.sample.redis.sdr.JsonRedisSerializer"/>
<bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
	<property name="connectionFactory" ref="jedisConnectionFactory"></property>
	<property name="defaultSerializer">
		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
	</property>
</bean>

    并没有在配置文件中,使用JacksonJsonRedisSerializer,因为这样实在是麻烦而且不灵活(主要是jackson需要ClassType)。我们将在java代码进行转换,因为通过java代码,使用jackson工具将json字符串转换成javabean是非常简单的。

    2) 程序实例:

/**
* 不使用sdr自带的json序列化工具,一切操作基于string
**/
public class JsonRedisSeriaziler{
	public static final String EMPTY_JSON = "{}";
	
	public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
	
	protected ObjectMapper objectMapper = new ObjectMapper();
	public JsonRedisSeriaziler(){}
	
	/**
	 * java-object as json-string
	 * @param object
	 * @return
	 */
	public String seriazileAsString(Object object){
		if (object== null) {
			return EMPTY_JSON;
		}
		try {
			return this.objectMapper.writeValueAsString(object);
		} catch (Exception ex) {
			throw new SerializationException("Could not write JSON: " + ex.getMessage(), ex);
		}
	}
	
	/**
	 * json-string to java-object
	 * @param str
	 * @return
	 */
	public <T> T deserializeAsObject(String str,Class<T> clazz){
		if(str == null || clazz == null){
			return null;
		}
		try{
			return this.objectMapper.readValue(str, clazz);
		}catch (Exception ex) {
			throw new SerializationException("Could not write JSON: " + ex.getMessage(), ex);
		}
	}

}
public class RedisClientTest {

	private JsonRedisSeriaziler seriaziler;
	
	private RedisTemplate redisTemplate;

	public void setSeriaziler(JsonRedisSeriaziler seriaziler) {
		this.seriaziler = seriaziler;
	}

	public void setRedisTemplate(RedisTemplate redisTemplate) {
		this.redisTemplate = redisTemplate;
	}
	
	
	public void insertUser(User user){
		ValueOperations<String, String> operations = redisTemplate.opsForValue();
		operations.set("user:" + user.getName(), seriaziler.seriazileAsString(user));
	}
	
	public User getUser(String name){
		ValueOperations<String, String> operations = redisTemplate.opsForValue();
		String json = operations.get("user:" + name);
		return seriaziler.deserializeAsObject(json, User.class);
	}
}

三.sdr与xml

    实施办法可以参见本文“sdr与json”,同时参考spring-oxm相关文档。

 

 

Outlook Express 6 (OE6) for Win7/Win8/Win10 英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。 立即下载

相关推荐

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 374

redis serializer策略

redis key 全部大写 key不能太长也不能太短; key之间以:分开; id name 1 zs redis使用时,注意命名空间; 项目名或缩写:表明转换为key前缀:区分key的字段(主键列名):主键值 project:user:userid:1 设置token KEY === PRO:USER:LOGINNAME:373166324 VALUE === 2kd-...

qq_43183527的博客 2047

Zynq UltraScale+ MPSoC-AMP(linux+裸机)

接着 Zynq UltraScale+ MPSoC-双核裸机AMP继续 平台工具:zcu106,vitis2020.2,petalinux2019.2 文章目录1.cpu1跑裸机2.cpu0跑linux2.1petalinux设置2.2 app3.生成BOOT.bin4.zcu106测试 1.cpu1跑裸机 参照Zynq UltraScale+ MPSoC-双核裸机AMP建立的工程进行修改。BSP中stdin与out修改为uart1,uart1给裸机用,uart0给linux用。 ddr空间裸机与linu

zhuxl24的博客 5195

Redis 序列化器

在 Redis 中,序列化器(Serializer)是用于将数据在存储和读取时进行序列化和反序列化操作,即对数据进行编码和解码

NiceWeather9的博客 2204

publisher与subscriber话题的消息类型md5sum不一致问题

[ERROR] [1604235557.591296096]: Client [/range_vision_fusion_01] wants topic /detection/vision_objects to have datatype/md5sum [autoware_msgs/DetectedObjectArray/13415342e539aa36ea9a6f04ffaf39b4], but our version has [autoware_msgs/DetectedObjectArray/c16a

cxhmike的博客 6620

RK3588&RK3576实现 HW-ID DTB(动态加载不同的Kernel DTB)功能

RK平台的U-Boot⽀持检测硬件上的GPIO或者ADC状态动态加载不同的Kernel DTB,暂称为HW-ID DTB(Hardware id DTB)功能。

Wynter 849

Redis 序列化器和持久化

1、并发几率很小的数据,几乎不用考虑,加上缓存过期时间,缓存失效后查询主动更新2、业务上是否能容忍一定时间的不一致,如能容忍的话,加上缓存过期时间;如果不能容忍缓存数据不一致,可以通过加分布式读写锁保证并发读写或写写的时候按顺序排好队,读读的时候相当于无锁。3、可以用阿里开源的 canal 通过监听数据库的 binlog 日志及时的去修改缓存,但是引入了新的中间件,增加了系统的复杂度Cache-Aside Pattern 即旁路缓存模式,读操作:读的时候,先读缓存,缓存命中的话,直接返回数据;

qq_53333731的博客 965

存储硬盘格式怎么把512还原为520格式??

硬盘厂商工具(如SeaChestsg_format)可以调整扇区大小。备份数据,因为调整扇区会清除硬盘内容。根据硬盘型号和接口类型,选择合适的工具进行调整。如果你需要更详细的帮助,请提供你的硬盘型号和存储设备类型。希望如上措施及解决方案能够帮到有需要的你。PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

**My Coding Family** 1146

Redis客户端 - RedisSerializer

自定义的序列化方式也加进去了对引用类型的序列化,我们来实际测试一下。编写一个 User 类@Data类中属性需要给出 set 和 get方法将 User 对象存储至 Redis@Test// 插入一条 Object 类型的数据// 获取一条 Object 类型的数据虽然 JSON 的序列化方式可以满足我们存储对象的需求,为了在反序列化时知道对象的类型,将对象的类路径地址也序列化进 JSON 结果中,存入 Redis ,会带来额外的资源消耗。

一个编程爱好者的博客 1619

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

MoorePlus的博客 2370

OceanBase数据迁移(OMS)深度解析:异构数据库迁移方案、核心原理与实战优化指南

OceanBase迁移服务(OMS)提供异构数据库间全量+增量数据迁移与实时同步能力,核心价值在于保障业务连续性、数据一致性和异构兼容性。其分层架构包含服务接入层、流程编排层和组件链路层,支持Oracle/MySQL/DB2等与OceanBase的数据交互。关键技术包括DBCat引擎处理结构转换、并行分片实现全量迁移、以及日志解析保障增量同步。OMS通过类型映射、批量提交和断点续传等优化手段,确保迁移过程高效可靠,典型应用于去O迁移、数据库升级等场景。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 849

Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

一、概念简介: Redis:   Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家:   1.《The Little Redis Book》 是一本开源PDF,只有29页的英文文档,看完后对Redis的基本概...

acy29712的博客 455

广东省低应变题库

11.按《建筑地基基础检测规范》DBJ/T15-60-2019的规定,采用低应变法对混凝土预制桩进行检测时,地基基础设计等级为甲级的桩基工程抽检桩数不应少于总桩数的30%,其余桩基工程抽检桩数不应少于总桩数的20%,且不得少于10根;16.按《建筑地基基础检测规范》DBJ/T15-60-2019的规定,当对某桩的桩身完整性判定为III类时,可认为该桩不满足验收条件,不用进一步确定该桩桩身缺陷对桩身结构承载力的影响程度。2.地基基础检测所用计量器具均应在检定(校准、验证)的有效期内,性能符合相关技术要求。

ZShy001238的博客 319

spring data redis serializer SerializationException 序列化问题

speing data redis serializer SerializationException 序列化问题 项目中需要使用redis做一些缓存失效,以达到验证码失效的目的。由于K,V使用了,,验证验证码是否存在,是否达到规定次数。参看了官方文档(内容很少),碰到了序列化的问题,异常如下: org.springframework.data.redis.serializer.Ser

nobody 4万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

使用Spring缓存@Cacheable注解报错org.springframework.data.redis.serializer.SerializationException问题

项目使用Spring的缓存注解@Cacheable,在查询缓存时报错。

海星的博客 765

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Redis与Java】系列二:Spring Data Redis整合之道——Template与Serializer详解

在Spring生态中,Spring Data Redis提供了对Redis的高度抽象和便捷集成,极大简化了Java开发者与Redis的交互。本文作为【Redis与Java】系列的第二篇,将以约12000字的篇幅,深度解析Spring Data Redis的核心组件——RedisTemplate的设计哲学、使用模式以及序列化器的选型与定制。Spring Data Redis提供了强大而灵活的Redis集成方案,正确的配置和使用可以极大提升应用的性能和稳定性。

持续输出Java相关知识 496

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Redis、Jedis、Spring Data Redis及RedisTemplate和 Serializer详解

转载自https://www.cnblogs.com/edwinchen/p/3816938.html Redis   Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面。有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家:   1.《The Little Redis B...

ystyaoshengting的专栏 873

R语言tidyverse批量方差分析实战:从aov到TukeyHSD全流程

在数据分析实践中,多组间差异检验是科研与工程项目的常见需求。当面临多个变量需要逐一进行方差分析时,传统循环写法不仅代码冗余,还容易在结果提取和整理中出错。R语言提供了一套优雅的解决方案:借助tidyverse将宽表转为长表,通过nest与map实现批量建模,再结合broom::tidy提取整洁的方差分析表,并完成p值校正与效应量计算。本文从数据整理、模型拟合到事后比较(TukeyHSD)逐步拆解,帮助数据工作者高效完成批量显著性检验,同时规避因子水平缺失、零方差等常见陷阱,让多指标比较分析既清晰又可复现。

weixin_33853794的博客 286
上一篇: Spring-data-redis:特性与实例
下一篇: Spring-data-redis: 事务与pipeline
iteye_19607
博客等级 码龄8年 34粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值