在复述中使用模板对增量进行调用时出现报错如何解决

  介绍

本篇文章为大家展示了在复述中使用模板对增量进行调用时出现报错如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

使用弹簧复述的增量方法时,报错:

redis.clients.jedis.exceptions嵌套异常。JedisDataException:犯错的价值不是一个整数或范围的

<强>一、INCRBY关键增量

INCRBY关键增量介绍如下:

将关键所储存的值加上增量增加。如果关键不存在,那么关键的值会先被初始化为0,然后再执行INCRBY命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在64位(位)有符号数字表示之内。

 #键存在且是数字值
  
  redis>组排名50
  好吧
  
  redis>INCRBY排名20
  (整数)70
  
  redis>获得排名
  “70”;
  
  #键不存在时
  
  redis>存在反
  (整数)0
  
  redis>INCRBY计数器30
  (整数)30
  
  redis>得到反
  “30”;
  
  #键不是数字值时
  
  redis>集书“很久很久以前……“
  好吧
  
  redis>INCRBY书200
  (错误)犯错值不是一个整数或范围的

<强>二、错误分析

报错的初始使用方法为

布尔defaultUsed=false;
  如果(defaultSerializer==null) {
  defaultSerializer=new JdkSerializationRedisSerializer (
  类加载器!=零,# 63;类加载器:this.getClass () .getClassLoader ());
  }
  
  如果(enableDefaultSerializer) {
  如果(keySerializer==null) {
  keySerializer=defaultSerializer;
  defaultUsed=true;
  }
  如果(valueSerializer==null) {
  valueSerializer=defaultSerializer;
  defaultUsed=true;
  }
  如果(hashKeySerializer==null) {
  hashKeySerializer=defaultSerializer;
  defaultUsed=true;
  }
  如果(hashValueSerializer==null) {
  hashValueSerializer=defaultSerializer;
  defaultUsed=true;
  }

通过查看源码可以发现,

1. genericjackson2jsonredisserializer Jackson2JsonRedisSerializer是先将对象转为json,然后再保存到复述,所以,1在复述中是字符串1,所以无法进行加1 .

2. jdkserializationredisserializer使用的jdk对象序列化,序列化后的值有类信息,版本号等,所以是一个包含很多字母的字符串,所以根本无法加1 .

3。GenericToStringSerializer, StringRedisSerializer将字符串的值直接转为字节数组,所以保存到复述中是数字,所以可以进行加1

修正后使用方法为

  

<强> RedisTemplate使用碰坑

RedisTemplate。opsForValue ()。集(关键字,值)这种方式存入复述后会把数字型的值转为字符串,以后调用增量(关键,δ)方法报错。

在复述中使用模板对增量进行调用时出现报错如何解决