ASP.Net Core 6集成Redis调用SetAsync时报Lua脚本参数数量错误
报错根因
- 核心问题是本地Redis版本过低:你安装的3.0.504是微软早已停止维护的Windows归档旧版本,仅支持Redis 3.2及以下通信协议
- 当前使用的
Microsoft.Extensions.Caching.StackExchangeRedis包,缓存写入逻辑内置的Lua脚本适配Redis 4.0+参数规范,3.x版本Redis无法正确解析脚本传入的参数数量,直接抛出Lua脚本调用参数不匹配错误 - 你贴出的
AddAsync业务代码本身没有问题,同时配置绝对过期、滑动过期的写法不会触发该报错。
修复方案
二选一即可解决:
- 升级本地Redis至4.0及以上版本:Windows环境弃用微软归档的3.x旧安装包,可通过WSL部署官方维护版Redis,或用Docker启动官方Redis镜像,版本适配后无需修改业务代码,
SetAsync即可正常执行 - 若暂时无法升级Redis,直接将项目内
Microsoft.Extensions.Caching.StackExchangeRedisNuGet包降级到2.x系列版本,该版本内置Lua脚本兼容Redis 3.x协议,可直接适配你当前的本地Redis环境
补充说明
代码中SetAsync传入的token变量需要确保是方法签名中定义的有效CancellationToken参数,不要使用未声明的变量,不过这部分和本次遇到的Lua脚本报错无关联。
内容的提问来源于stack exchange,提问作者Neeraj Bhardwaj
相关产品推荐
相关产品推荐

