重点是:redis是顺序执行的。
1. 先去数据库 获取商品ID
2. 拿商品ID 去redis 中查是否存在数据,如果存在则,当前数据处于一个被其他进程或线程暂用的状态,如果redis中没有找到,则添加数据 使用setnx( K , V) 存储数据或者 set指令,给当前操作的数据添加锁,操作完数据后要解锁使用del指令删除redis里面的锁。
3. 但是需要记住,加锁、释放锁、锁超时 三种状态, redis添加数据可 设置过期时间30S, 防止应为订单服务宕机,导致锁不能及时关闭(锁超时的解决方案)。
SET key value
含义:
将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
SETEX key seconds value
该命令相当于将下面两行操作合并为一个原子操作
SET key value
EXPIRE key seconds # 设置生存时间