You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Redis计算Lua脚本SHA-1哈希前会去除尾部空白?

Redis SCRIPT LOAD + EVALSHA 持续报 NOSCRIPT 错误的排查与解决

最近优化Redis部署流程时,我踩了个挺头疼的坑:本来想通过独立程序用sha1sum预先算出Lua脚本的SHA-1哈希,之后直接用EVALSHA调用脚本,结果却一直收到NOSCRIPT错误,折腾了好一阵才找到根因。

一开始我怀疑是Redis v3.0.6的问题,测试后发现Redis计算脚本哈希前好像会修改脚本内容——比如移除最后一行的尾部空白?但深入排查才发现,根本不是Redis的锅,是Bash的IFS变量在搞鬼!当用常规方式传递脚本内容时,IFS会悄悄篡改脚本里的换行和空白字符,导致本地算出的SHA-1和Redis实际存储的完全对不上。

靠谱的解决姿势

要避免脚本内容被篡改,必须让Redis拿到和本地文件完全一致的内容,最稳妥的方式是通过标准输入传递脚本:

redis-cli -x SCRIPT LOAD < script.lua

用这个命令上传脚本后,Redis生成的SHA-1哈希就和本地用sha1sum计算的完全匹配了,EVALSHA调用也不会再报错。

内容的提问来源于stack exchange,提问作者Sean Werkema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:01