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

问题描述

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

问题分析

明明在我的开发环境上跑的好好着,怎么到测试环境就有问题了?然后试着看了下我的开发环境和测试环境的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类有什么区别呢?如下:

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

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

简单的说,官方推荐使用StrictRedis类,不推荐Redis类,原因是他和咱们在redis-cli操作有些不一样,主要不一样是下面这三个方面。

1、LREM:参数 ‘num‘ 和 ‘value‘ 的顺序交换了一下,cli是 lrem queueName 0 ‘string‘ , 这里的0时所有的意思, 但是Redis这个类,把0和string的位置调换了;

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

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

解决方法

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

原文地址:https://www.cnblogs.com/lucky-heng/p/11135287.html

时间: 2024-09-28 12:04:49

redis报错: redis.exceptions.ResponseError: value is not an integer or out of range的相关文章

python操作redis报错:redis.exceptions.DataError: ZADD allows either 'nx' or 'xx', not both解决方案

一.问题描述 sorted set操作执行:print(connect.zadd('grade', 'bob', 98, 'mike' ,100))时报错redis.exceptions.DataError: ZADD allows either 'nx' or 'xx', not both 二.出现该问题原因 上面的connect.zadd('key','value1','score1','value2','score2')写法是redis-py 3.0之前的版本 在redis-py 3.0版

连接redis报错MISCONF Redis is configured to save RDB s

连接redis报错MISCONF Redis is configured to save RDB snapshots date: Mon Nov 11 16:11:24 CST 2019 笔者:张首富 程序报错如下 redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands t

mac brew install redis 报错

mac brew install redis 报错 /usr/local/opt/php55/bin/phpize /usr/local/opt/php55/bin/phpize: line 61: /usr/local/Library/ENV/4.3/sed: No such file or directory /usr/local/opt/php55/bin/phpize: line 62: /usr/local/Library/ENV/4.3/sed: No such file or di

Redis报错“ OOM command not allowed when used memory > 'maxmemory' ”

生产环境上遇到这个问题,控制台不停打印 “OOM command not allowed when used memory > 'maxmemory' ”; 起初不知道是什么,经过一番搜索: 1.登陆redis客户端:./redis-cli -h IP -p port -a passwd 2.执行命令:redis>info memory 若配置文件中,最大内存的策略设置为 maxmemory-policy volatile-lru 此配置只是清楚设置过期时间的key值,然而本应用并没有设置过期

Uiautomator--出现报错“urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054,''>>”的解决方式!

在运行uiautomator时,出现报错"urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054,''>>"根据错误提示,可以看出是"socket断开了,连接中断",因此需要将sleep等待时间延长,即可解决问题 代码如下: 出现报错的形式 解决方式: 将sleep修改为5,延长等待时间,让页面加载完毕 time.sleep(5) 解决后运行结果: Uiautom

用random.randint函数时 报错 &#39;str&#39; object cannot be interpreted as an integer问题

range()仅将int值用作参数.所以会报错. 原: n=input("輸入") 解决方法: 1.eval() n=eval(input("輸入")) 2.用int() n=int(input("輸入")) 用random.randint函数时 报错 'str' object cannot be interpreted as an integer问题 原文地址:https://www.cnblogs.com/claudia529/p/12078

redis 报错 &quot;CONFIG REWRITE failed: Permission denied&quot;

无意中看到了redis的config rewrite这个命令.闲来无聊,所以打算自己做个实验.下面的文章是redis关于config rewrite的描述信息: CONFIG REWRITE 命令对启动 Redis 服务器时所指定的 redis.conf 文件进行改写: 因为 CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录

redis报错“max number of clients reached&quot;

查看redis监控的时候看到redis的graph出现不正常的情况,截图如下: 如上面截图所展示的样子,可以看到redis 的客户端连接数很突兀的上升到10K,又突然下降到0.排除了监控本身的原因,很明显是因为redis本身出了问题. 进入redis服务器,连接上去 /usr/bin/redis-cli -p 6399 -h 127.0.0.1 >127.0.0.1:6399>> info ERR max number of clients reached 无论执行命令,显示的都是上面的

启动redis报错:...‘vm-enabled no‘...

启动 redis 发现报错: [[email protected] ~]# service redis start Starting redis-server: *** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 375 >>> 'vm-enabled no' Bad directive or wrong number of arguments [FAILED] ===解决方法=== redis