ValueOperations的increment方法ERR value is not an integer or out of range错误解释

0 篇文章 0 订阅

最近在开发中,使用Redis来实现数据点击量的统计存储功能。为什么使用Redis?点击量之类的功能,需要频繁触发更新操作,而且高并发访问时,还需要考虑操作冲突导致数据不一致的问题。而Redis是内存型存储,相比关系型数据库,操作更快,避免了频繁的文件写操作。更重要的是,Redis中有个INCR和INCRBY命令,都可以实现值递增的原子性操作,方便了解决了高并发时的冲突问题。
Redis手册中的命令说明很详尽,还有Redis中文命令参考的网站可供使用,在此感谢无私的翻译人员。如下:

Redis中文参考手册
sdr中针对redis的命令,一一提供了对应的方法可供使用,结合redis命令参考sdr的api,很容易上手。但唯一不足地是,sdr提供的api太简略了,只提供了函数和参数,参数的说明、返回值的说明、异常情况的说明统统没有,这个只能自己在实践的过程中用代码来认知了。
sdr中提供了一个ValueOperations的接口来针对Redis中的Key-Value的命令操作。通过粗略追踪源码的手段,可以大概了解到,sdr框架操作Redis的实质,是和Redis服务通信,告知Redis服务执行指定的命令。ValueOperations中有increment方法,本质上是向Redis服务发送的INCRBY命令。当然要实现点击量递增的功能,需要使用ValueOperations的increment方法。
Redis采用Key-Value的格式实现了多种结构的数据,例如List、Set等。但Redis中的Key和Value存储的都是字符串,而Java是面向对象的语言,大部分情况下操作数据也都是对象,那么Java与Redis的结合手段自然是序列化了。sdr提供了丰富的序列化策略,所以在配置sdr时,可以显示地指定Key和Value的序列化器,如下代码所示。这部分不了解的同志可以搜索相关的内容去了解,这里不再做过多说明。

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">         <property name="connectionFactory" ref="jedisConnectionFactory" />         <property name="keySerializer">             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />         </property>     </bean>  

如果没有显示指定Key或Value的序列化器,默认采用JdkSerializationRedisSerializer。StringRedisSerializer将数据存储为正常的字符串,而且JdkSerializationRedisSerializer则是将数据存储为一串序列字符串,还需通过反序列化才能得到正常的字符串。

当在使用ValueOperations之类的接口时,值得注意的是,接口是使用泛型的,如ValueOperations

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"           p:connectionFactory-ref="jedisConnectionFactory">         <property name="keySerializer">             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />         </property>         <property name="valueSerializer">             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />         </property>     </bean>  

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"           p:connectionFactory-ref="jedisConnectionFactory">         <property name="keySerializer">             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />         </property>         <property name="valueSerializer">             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />         </property>     </bean>

参考链接:
http://docs.spring.io/spring-data/redis/docs/1.4.0.M1/reference
http://shift-alt-ctrl.iteye.com/blog/1887370

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值