redis报错: redis.exceptions.ResponseError: value is not an integer or out of range

问题描述python

今天在使用python的redis客户端时碰到了这样的报错:redis.exceptions.ResponseError: value is not an integer or out of range,是在使用setex函数时出的问题。redis

 

问题分析函数

明明在个人开发环境上跑的好好着,怎么到测试环境就有问题了?而后试着看了下个人开发环境和测试环境的redis客户端版本,一个是2.x,一个是3.x,测试环境的redis客户端是新安装的,那就把3.x卸了装个2.x吧,再跑的就ok了,看来是版本差别。本着将问题追踪到底的宗旨,去PyPI上找redis客户端的更新文档,通常这种在使用上出现了较大差别的都是大版本更新,直接找到3.0的更新文档,看到了下面这样的说明。测试

大意就是3.0的客户端已经废弃了Redis这个类,将以前的StrictRedis类更名为Redis,这样在使用SETEX方法时,参数的顺序已经变了(name, time, value),再也不是以前的(name, value,time),那么Redis这个类和StrictRedis类有什么区别呢?以下:spa

StrictRedis:用于实现大部分官方的命令,并使用官方的语法和命令(好比,SET命令对应与StrictRedis.set方法)blog

Redis:是StrictRedis的子类,用于向后兼容旧版本的redis-py。开发

 

简单的说,官方推荐使用StrictRedis类,不推荐Redis类,缘由是他和我们在redis-cli操做有些不同,主要不同是下面这三个方面。rem

一、LREM:参数 'num' 和 'value' 的顺序交换了一下,cli是 lrem queueName 0 'string' , 这里的0时全部的意思, 可是Redis这个类,把0和string的位置调换了;文档

二、ZADD:实现时 score 和 value 的顺序不当心弄反了,后来有人用了,就这样了;string

三、SETEX:time 和 value 的顺序反了。

 

解决方法

因此解决办法就有两种,第一种,按照3.x中的规定修改setex函数的参数顺序,第二种,换回2.x,固然仍是推荐第一种办法。

相关文章
相关标签/搜索