RedisTemplate序列化方式导致的get(key)拿不到值,存入key乱码问题

本文介绍了在Java项目中,由于RedisTemplate的默认序列化方式导致的get(key)无法获取存入值以及key值显示乱码的问题。现象包括服务A存入的数据在服务B中无法获取,且存储的对象带有特殊字符。通过分析源码发现是JdkSerializationRedisSerializer造成的。解决方法是统一RedisTemplate的序列化方式,自定义序列化配置,以确保数据正确读取和存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言说明

笔者所在的项目中,有两个服务之间需要使用redis实现通信,及一个服务存入(key,value),另一个服务get(key)实现通信。使用过程中发现redis通信存在问题,最终重写RedisTemplate序列化方式后问题得到解决。

现象描述

  • 服务A通过RedisTemplate.opsForValue().set()存入key,在服务B中RedisTemplate.opsForValue().get(key),没能获取到任何内容,日志打印两服务中的key,发现两服务key值没有问题。
  • 服务A使用RedisTemplate.opsForList().leftPushAll(QUEUEKEY,queueValueList)往队列中添加对象,使用redis管理工具,查看到redis中实际存储的queueValue,被加上了一些特殊字符,如\xac\xed\x00\x05t\x00\queueValue1

问题分析

通过现象二,发现写入redis的值被转码了,通过查看RedisTemplate源码,知道RedisTemplate默认序列化方式:org.springframework.data.redis.serializer.JdkSerializationRedisSerializer

	@Override
	public byte[] serialize(@Nullable Object object) {
   
		if (object == null) {
   
			return SerializationUtils.EMPTY_ARRAY;
		}
		try {
   
			return serializer.convert(object);
		} catch (Exception ex) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值