在复述中使用模板存储缓存数据出现乱码如何解决

  介绍

这篇文章给大家介绍在复述中使用模板存储缓存数据出现乱码如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言

RedisTemplate是春天对于复述的封装。

在复述中使用模板存储缓存数据出现乱码如何解决

如上图所示,RedisTemplate中定义了对5种数据结构操作。

redisTemplate.opsForList();//操作列表   redisTemplate.opsForValue();//操作字符串   redisTemplate.opsForCluster();//集群时使用   redisTemplate.opsForGeo();//地理位置时使用   redisTemplate.opsForHash();//操作散列   redisTemplate.opsForSet();//操作集   redisTemplate.opsForZSet();//操作有序集

与StringRedisTemplate的区别

StringRedisTemplate继承RedisTemplate。

它们采用的序列化策略不同:

* StringRedisTemplate默认采用的是字符串的序列化策略,保存的键和值都是采用此策略序列化保存的。

* RedisTemplate默认采用的是JDK的序列化策略,保存的键和值都是采用此策略序列化保存的。

RedisTemplate和StringRedisTemplate它们存取的数据是相互独立的。

解决办法

上文已经提及,在动手的过程中,我采用的是RedisTemplate,在传递字符串类型的数据结构后,查看缓存会发现数据乱码现象。

在复述中使用模板存储缓存数据出现乱码如何解决

这时候我们需要修改RedisTemplate的序列化策略。

RedisSerializer, stringSerializer =, new  StringRedisSerializer ();   ,,,,,redisTemplate.setKeySerializer (stringSerializer);   ,,,,,redisTemplate.setValueSerializer (stringSerializer);   ,,,,,redisTemplate.setHashKeySerializer (stringSerializer);   ,,,,,redisTemplate.setHashValueSerializer (stringSerializer);

但是注意一点,由于采用了字符串的序列化策略,所以只接受价值值类型为字符串的参数。

如果像我一样传递了整数类型的参数,直接使用toString()方法存入缓存。

ops.set (“stock",, redPacket.getStock () .toString (), TIME_OUT,, TimeUnit.SECONDS);

在复述中使用模板存储缓存数据出现乱码如何解决

这样就解决了乱码问题。

附:SpringBoot启动实例化配置

@ configuration   public  class  RedisConfigurtion  {   @ autowired才能   private 才能;RedisTemplate  redisTemplate;   ,@ bean   public 才能;RedisTemplate<字符串,Object>, stringSerializerRedisTemplate (), {   ,,,RedisSerializer, stringSerializer =, new  StringRedisSerializer ();   ,,,redisTemplate.setKeySerializer (stringSerializer);   ,,,redisTemplate.setValueSerializer (stringSerializer);   ,,,redisTemplate.setHashKeySerializer (stringSerializer);   ,,,redisTemplate.setHashValueSerializer (stringSerializer);   ,,,return  redisTemplate;   ,,}   }

<>强补充:复述,键和值的乱码问题解决,含日期转化格式问题

在复述中使用模板存储缓存数据出现乱码如何解决

在项目中,遇到的问题是复述的键和值出现的乱码问题:

而原本的内容为下:

{   “status"才能:“success"   “data"才能:{   ,,,“id": 3,   ,,,“title":“花林“,   ,,,“price": 99年,   ,,,“stock": 81年,   ,,,“description":“美女一只“,   ,,,“sales": 17日   ,,,“imgUrl":“https://xiaolei1996.oss-cn-shanghai.aliyuncs.com/blog/title/we1.jpg"   ,,,“promoStatus": 2   ,,,“promoPrice": 50,   ,,,“promoId": 1,   ,,,“startDate":“2020 - 03 - 23, 21:50:59"   ,,}   }

原因:

是因为和复述,内部的编码协议出现了问题,所以需要改进.spring提供了一个优化方案。

springboot的redisTemplate改进。

@ component   @EnableRedisHttpSession (maxInactiveIntervalInSeconds =, 3600)   public  class  RedisConfig  {   ,@ bean   public 才能;RedisTemplate  redisTemplate (RedisConnectionFactory 工厂){   ,,,RedisTemplate  RedisTemplate =, new  RedisTemplate ();   ,,,redisTemplate.setConnectionFactory(工厂);   ,,,//首先解决的关键序列化问题   ,,,StringRedisSerializer  StringRedisSerializer =, new  StringRedisSerializer ();   ,,,redisTemplate.setKeySerializer (stringRedisSerializer);   ,,,//解决值的序列化问题   ,,,Jackson2JsonRedisSerializer  Jackson2JsonRedisSerializer =, new  Jackson2JsonRedisSerializer (Object.class);   ,,,redisTemplate.setValueSerializer (jackson2JsonRedisSerializer);   ,,,return  redisTemplate;   ,,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

在复述中使用模板存储缓存数据出现乱码如何解决