看法:
背景:在我们使用redis的时候可能会在一些场景下使用到一些特殊的功能,但是redis现有的命令不满足我们的需求,所以我们需要自定义一些命令,但是我们自定义命令一般是多个指令结合在一起的,所以会存在并发执行中数据被修改问题,这就要求我们的自定义命令是原子性的,排它性的,在执行这个命令的时候不允许其他脚本、命令执行。
在redis 的官方文档中有描述lua脚本在执行的时候具有排他性,不允许其他命令或者脚本执行,类似于事务。但是存在的另一个问题是,它在执行的过程中如果一个命令报错不会回滚已执行的命令,所以要保证lua脚本的正确性
查阅总结:
lua脚本在执行的时候不允许其他命令出入并发执行,而且他们有两个运行的函数call()和pcall(),两者区别在于,call在执行命令的时候如果报错,会抛出reisd错误终端执行,而pcall不会中断会记录下来错误信息