Lua脚本在Redis中的原子性
2025年4月25日小于 1 分钟
Lua脚本在Redis中的原子性
- 在Redis中由于是单线程的,所有的请求到达后都会进行排队依次执行
- 在秒杀业务中需要执行(库存判断,下单资格,库存扣减)等多个步骤。
3.1 如果是在Java代码中,即使这几个步骤写在一个方法中(即同一个线程内),依旧会是几个请求到达Redis进行排队执行,无法保证原子性。如果需要模拟原子性需要进行加锁,会比较麻烦。
3.2 如果是在Lua脚本中,会把多个操作封装在一个请求中。即使是在 Redis 单线程模型下,Lua 脚本也会保证整个脚本的执行不会被中断或打断,它会将所有的操作(例如查询库存、资格判断、判断库存、扣减库存,)都一次性执行,这样 只需要一次网络请求。