前文:
redis事务的实现原理是把事务中的命令先放入队列中,当client提交了exec命令后,redis会把队列中的每一条命令按序执行一遍。如果在执行exec之前事务中断了,那么所有的命令都不会执行;如果执行了exec命令之后,那么所有的命令都会按序执行。但如果在事务执行期间redis被强制关闭,那么则需要使用redis-check-aof 工具对redis进行修复,删除那些部分执行的命令。Redis确保正一条script脚本执行期间,其它任何脚本或者命令都无法执行。正是由于这种原子性,script才可以替代MULTI/EXEC作为事务使用
一:Redis 中使用 LUA 的好处
1:减少网络开销,在 Lua 脚本中可以把多个命令放在同一个脚本中运行。
2:原子操作,Redis 会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件。
3:复用性,客户端发送的脚本会永远存储在 Redis 中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑。
二:Redis + LUA 整合使用
EVAL 命令为输入脚本定义一个 Lua 函数,然后通过执行这个函数来执行脚本。
EVALSHA 通过构建函数名,直接调用 Lua 中已定义的函数,从而执行相应的脚本。
EVAL 命令:EVAL script numkeys key [key ...] arg [arg ...]
(1)script 参数:是一段 Lua 脚本程序,它会被运行在 Redis 服务器上下文中,这段脚本不必ÿ