首页/数据/数据库速查/SCRIPT LOAD / EVALSHA 与脚本缓存管理
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

SCRIPT LOAD / EVALSHA 与脚本缓存管理

脚本先 SCRIPT LOAD 拿 sha1,后续用 EVALSHA 只发 40 字节哈希调用,省带宽;缓存不持久化,重启/FLUSH 后调用报 NOSCRIPT,客户端要自动回落 EVAL 并重新加载。

数据库速查数据更新于 2026-10-12

加载与调用

加载与调用
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# -> "4e6d8fc8f0f3f0d4..."
EVALSHA 4e6d8fc8f0f3f0d4... 1 mykey
SCRIPT EXISTS 4e6d8fc8f0f3f0d4...   # 1=在 0=不在
SCRIPT FLUSH ASYNC                  # 清空脚本缓存
SCRIPT KILL                         # 杀超时脚本(只读脚本可杀)
NOSCRIPT缓存没有该脚本:客户端应回退 EVAL 重新加载
缓存生命周期实例内内存缓存;重启、FLUSH 后消失
版本管理脚本变更=sha1 变更,客户端按内容哈希缓存最稳
主流客户端(redis-py、Jedis、Lettuce)都内置脚本管理:首次 EVAL,之后 EVALSHA,遇 NOSCRIPT 自动重试。

易错点

  • 生产只用 EVALSHA 不处理 NOSCRIPT:实例重启后相关功能全部报错
  • 脚本执行过写命令超时:SCRIPT KILL 杀不掉,实例会一直阻塞到脚本结束

数据来源与参考

  • Redis 官方文档: SCRIPT LOAD
  • Redis 官方文档: EVALSHA

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌