Redis Cluster环境下LUA脚本阻塞规则及作用范围技术问询
Redis集群Lua脚本阻塞规则解答
场景1:跨节点访问是否阻塞
结论:C2的请求完全不会被阻塞。
Redis集群的各个节点是独立部署、独立运行的,各自拥有独立的命令执行逻辑和运行资源。R1节点上运行Lua脚本只会占用R1的执行资源,和R3节点完全无关。无论C2是读取R3上的键E,还是在R3上执行其他Lua脚本,都可以正常执行,不需要等待C1的脚本运行结束。
对应场景示意图:
场景2:同一节点操作不同键是否阻塞
结论:C2的请求会被完全阻塞,直到C1的Lua脚本执行完毕。
Redis核心命令执行采用单线程串行模型,Lua脚本在Redis中会被作为一个整体原子执行,执行过程中不会被其他命令打断。不管脚本操作的是该节点上的哪个键,只要该节点正在运行Lua脚本,该节点后续收到的所有请求(包括普通读写其他键、执行其他Lua脚本等)都会进入队列排队,直到当前Lua脚本执行完成后才能依次处理。
对应场景示意图:
Lua脚本在Redis集群中的阻塞对象说明
- 阻塞的粒度是单个Redis节点,而非整个集群,集群中其他未运行该Lua脚本的节点完全不受影响,可以正常处理请求。
- 被阻塞的范围是运行Lua脚本的节点上所有后续收到的客户端请求,和请求操作的键是否与Lua脚本操作的键重合无关,不管是普通读写命令还是其他Lua脚本请求,都会被阻塞。
内容的提问来源于stack exchange,提问作者micah
相关产品推荐
相关产品推荐

