阿里云redis集群实例报"EVAL"错误

项目上线遭遇Redis集群版不支持EVAL命令的问题,文章分享了将Redis实例从集群模式调整为主从模式的解决方案,适用于无法修改代码的项目迁移场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题说明:

 项目上线日志报“for redis cluster, eval/evalsha number of keys can't be negative or zero”错误;

 

如下图:

 

二话不说百度,得到结果为:   阿里云集群版不支持EVAL命令;

 解决办法:

将redis实例从集群模式调整为主从。

(因为是项目迁移不能修改代码,只能调整环境。如果有更好的方法可以写在评论中)

 

### 使用 RedisEVAL 命令 EVAL 命令用于执行 Lua 脚本,这使得能够更高效地处理复杂操作而无需多次往返于客户端和服务端之间。为了运行 EVAL 命令,Redis 需要事先加载脚本,可以通过实际执行该脚本来完成这一过程,也可以通过 `SCRIPT LOAD` 命令来预加载脚本[^2]。 下面是一个简单的例子展示如何利用 EVAL 执行一个 Lua 脚本: ```lua -- 将这段代码保存为 incrbyfactor.lua 文件内容 return tonumber(ARGV[1]) * tonumber(redis.call('GET', KEYS[1])) ``` 接着,在命令行界面中调用这个 Lua 脚本如下所示: ```bash $ redis-cli 127.0.0.1:6379> SET mykey 10 OK 127.0.0.1:6379> EVAL "return tonumber(ARGV[1]) * tonumber(redis.call('GET', KEYS[1]))" 1 mykey 5 (integer) 50 ``` 在这个例子中,`EVAL` 接受三个参数:首先是 Lua 脚本本身;其次是键的数量(这里是 1),即 `KEYS` 数组里有多少项;最后是指定的 key 和传递给脚本的额外参数列表(这里只有一个整数因子)。注意这里的 `mykey` 是作为 KEY 参数传入的,而乘法运算中的因数 `5` 则被当作 ARGV 参数提供给了 Lua 脚本[^1]。 对于集群环境下的情况,如果尝试在一个分片上设置某个键并立即在同一会话内访问它,则可能会遇到重定向的情况,这是因为集群模式下不同的键可能分布在不同节点上[^4]。不过上述关于 EVAL 的基本用法不受影响,因为 EVAL 总是在单个实例上下文中执行其逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值