已经对结构进行了修改的Lua脚本将无法被中断
在使用EVAL或者EVALSHA执行Lua脚本的时候,用户可能会写出永远也不返回的脚本,导致其他客户端无法正常地执行命令,为了解决这一问题,Redis提供了两种方法来停止正在运行的脚本,选择使用哪种方法取决于脚本是否执行了Redis的写命令。
对于不执行任何写命令的只读脚本来说,用户可以在脚本的运行时间超过lua-time-limit选项指定的时间之后,执行SCRIPT KILL命令杀死正在运行的脚本(lua-time-limit的详细信息可以通过Redis的配置文件查看)。
另一方面,如果脚本已经对Redis存储的数据进行了写入,那么杀死脚本将导致Redis存储的数据进入一种不一致的状态,在这种情况下,用户唯一能够使用的恢复(recover)手段就是使用SHUTDOWN NOSAVE命令杀死Redis服务器,这将导致Redis丢失最近一次创建快照之后或者最近一次将命令写入AOF文件之后数据发生的所有变化。
因为以上这些限制,我们必须在将脚本放到生产环境里面运行之前,先对脚本进行测试