1、Redis锁实现方式------通过redis的原子性方法setnx来实现
redis为单线程单进程模式,采用队列模式将并发访问变成串行访问,使用 setnx命令实现分布式锁。
通过注解@CacheLock(lockedPrefix = "xx"),setnx key = xx,如果返回1,则客户端获得该锁,执行程序。若其它客户端同时访问时,会返回0,表示该锁已经被获得,则不执行程序,可进行重试,直至超过设置的重试时间,锁超时。
当获得锁的程序执行完成后,通过del key = xx释放锁,其它重试的客户端则可以进入。
利用setnx防止库存超卖的详细步骤:
- 获取锁:使用setnx命令尝试为特定产品设置锁。如果成功获得锁,则可以继续操作;否则,等待锁被释放或重新尝试。
- 检查库存:在获得锁后,查询当前库存值,确保库存充足。
- 更新库存:如果库存充足,减少库存并更新数据库。
- 释放锁:完成操作后,删除锁,释放锁给其他客户端。
- 重试逻辑:如果无法获得锁或库存不足,可能需要重试&#