首页/数据/Redis 进阶速查/Lua 脚本:原子执行与 EVALSHA
本包目录(421 条)
数据结构与选型42 条
持久化56 条主从与哨兵51 条Cluster 集群44 条内存与管理99 条性能与排障129 条

Lua 脚本:原子执行与 EVALSHA

EVAL 在服务端执行 Lua 实现复合原子操作;脚本先 SCRIPT LOAD 拿 SHA 再 EVALSHA,可省去每次传输脚本正文的开销。

Redis 进阶速查数据更新于 2026-10-12
执行EVAL script numkeys key... arg...
预载SCRIPT LOAD script 返回 sha1
调用EVALSHA sha1 numkeys key... arg...

示例

示例
redis-cli EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 k1 v1
redis-cli SCRIPT LOAD "return redis.call('INCR', KEYS[1])"
redis-cli EVALSHA <sha1> 1 counter:1
脚本内不能调用阻塞命令(BLPOP、BZPOPMIN 等),集群下所有路由键必须放在 KEYS 数组;EVALSHA 命中失败(NOSCRIPT)时客户端应回退 EVAL。

易错点

  • NOSCRIPT 错误在实例重启或 SCRIPT FLUSH 后必然出现,客户端库需要实现自动回退
  • KEYS 与 ARGV 的区分影响集群路由:所有参与路由的键必须放在 KEYS 里

数据来源与参考

  • Redis 官方文档:EVAL / EVALSHA / SCRIPT LOAD 命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌