RedisTemplate 设置KEY 出现的 \XAC\XED\X00\X05T\X00

文章讲述了在Spring中使用RedisTemplate设置key值时,由于默认的JdkSerializationRedisSerializer导致无法正确解析执行时间,从而影响任务执行。解决方法是显式指定RedisTemplate的类型并配置自定义序列化方式。
摘要由CSDN通过智能技术生成

项目场景:

在redis中设置一个key值,定时任务通过redis中缓存的时间判断任务是否已经执行过。

redisTemplate.opsForValue().set("schedule:task:nextExecTime:T20231124093052107YDaheKmL","2023-12-27 03:47:02");

问题描述

通过redistemplate设置key值,但是后面通过key值,获取不到执行时间,导致任务没有执行

@Autowired
private RedisTemplate redisTemplate;
redisTemplate.opsForValue().set("schedule:task:nextExecTime:T20231124093052107YDaheKmL","2023-12-27 03:47:02");

原因分析:

在操作redis时默认使用JdkSerializationRedisSerializer 来进行序列化。spring操作redis是在jedis客户端基础上进行的,而jedis客户端与redis交互的时候协议中定义是用byte类型交互,看到spring-data-redis中RedisTemplate<K, V>在操作的时候k,v是泛型对象,而不是byte[]类型的,

这样导致的一个问题就是,如果不对RedisTemplate进行设置,spring会默认采用defaultSerializer = new JdkSerializationRedisSerializer();这个方法来对key、value进行序列化操作,JdkSerializationRedisSerializer它使用的编码是ISO-8859-1


解决方案:

1、在使用时,规定redisTemplate的类型

@Autowired 
private RedisTemplate<String,String> redisTemplat

2、添加 redis 配置类,配置使用的序列化方式

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisTemplate redisTemplate) {
        RedisSerializer stringSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setStringSerializer(stringSerializer);
        redisTemplate.setValueSerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(stringSerializer);
        return redisTemplate;
    }
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值