背景
高并发场景下,如果使用锁机制的时候会出现频繁的加锁解锁操作,大量消耗cpu资源,而且不同的redis语句之间如果出错的话那么就会造成认为只是执行了一半,则产生了脏数据导致数据库数据的不一致性问题。
redis执行lua脚本
redis使用一个lua解释器来执行所有的lua命令,并且redis保证每个脚本的执行是原子性的;当lua脚本执行时,不会有其它脚本和命令同时被执行,对于其它的redis客户端来说,一个lua脚本要么不可见,要么已经执行完了。
所以,利用redis执行lua脚本的这种原子性特点,在高并发多线程/协程的场景下可以避免资源竞争的问题。