redis报错: redis.exceptions.ResponseError: value is not an integer or out of range
问题描述
今天在使用python Django引用redis时碰到了这样的报错:redis.exceptions.ResponseError: value is not an integer or out of range,是在使用setex函数时出的问题。
问题分析
明明在我的另一个项目的环境上跑的好好着,怎么换了一个环境就有问题了?然后试着看了下我两个环境的redis客户端版本,一个是2.x,一个是3.x,3.x版本的出现了这样的问题,那就把3.x卸了装个2.x吧,再跑的就ok了,看来是版本差异。对比发现,3.0的客户端已经废弃了Redis这个类,将之前的StrictRedis类改名为Redis,这样在使用SETEX方法时,参数的顺序已经变了(name, time, value),不再是之前的(name, value,time)。
解决问题
第一种,按照3.x中的规定修改setex函数的参数顺序。在3.x redis包中的client.py下,把参数顺序改为:
name, value, time
第二种,换回2.x。
第三种,重写方法,在settings.py中加入
def newsetex(self, name, value, time): """ Set the value of key ``name`` to ``value`` that expires in ``time`` seconds. ``time`` can be represented by an integer or a Python timedelta object. """ if isinstance(time, datetime.timedelta): time = int(time.total_seconds()) return self.execute_command('SETEX', name, time, value) Redis.setex = newsetex

浙公网安备 33010602011771号