第二、通过Debug模式检查了一下单元测试和实际API接口对本系统下Redis反序列化方法入参的参数值,发现也均值一样的 第三、先后执行单元测试和实际API,查看Redis缓存中的数据是否相同,经检验也是相同的。 第四、我考虑到是否是因多线程引起的,所以对调用该序列化方法的Service层进行了并发控制,这里仅加了可重入锁。然...
如果直接使用RedisTemplate或者StringRedisTemplate,都在让插入的数据是乱码的,体验很不好,我们就需要通过序列化和反序列化来解决它; 创建一个Redis配置文件,来解决乱码问题 package com.example.common.conf;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;impo...
所以是原因是 Jackson 序列化 LocalDateTime 跟我们所预想的不一致,将注册给 Redis 的序列化模板修改成以下就行。 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisSerializer<Object> serializer = redisSerializer(); RedisTemplate<String, Object> redisTemplate = ne...
发现我在之前给该类增加过字段,然后redis的数据也忘记做清除,导致redis中的数据结构还是旧的,返回的序列号也是之前的,所以spring在拿到该数据后不能正确的给予反序列化,导致该报错。 问题解决 找到问题原因,解决就很简单了,直接将相关的redis做清除。 redis-cli keys"cpt_*"|xargs redis-clidel 好了,访问正常。
3.问题解决 然后和我们刚才序列化的方式对比一下,发现真的是序列化方式不一样,旧的是通过StringRedisSerializer进行序列化的,springboot是通过Jackson2JsonRedisSerializer进行序列化的。所以为了兼容老系统的序列化方式,这边我将springboot也改成StringRedisSerializer的序列化方式,代码如下所示: ...
springboot:redis反序列化发生类型转换错误 明明是同一个类,在反序列时报类型转换错误,真实奇怪。经查找资料,说是引入了devtools的缘故。 注释掉以下内容: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId>...
1、导入Redis的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、添加配置文件 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址(默认为localhost) ...
redis: host: localhost database: 1 port: 6379 注:此处有一些额外的配置,比如password等,我这里为省事就不写了。 下面我们可以编写测试类了: package com.eknown; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; ...
打开AbstractCacheInvoker类,看到里面有put,get,evict等方法,就是对应在repository的注解,还有个无参的构造方法里初始化了一个SimpleCacheErrorHandler。 打开SimpleCacheErrorHandler类 这个类就是处理redis缓存异常的类,发现里面只是简单的在异常时throw Exception,这也导致了如果redis异常,那么程序就会抛出异常,像query时,...