一般而言,在对数据进行“加锁”时,程序首先要获取锁来得到对数据进行排他性访问的能力,然后才能对数据执行一系列操作,最后还要将锁释放给其他程序。
传统上,redis采用一种称之为“乐观锁”的方式对数据进行加锁,采用watch命令来监视数据,watch只会在其他客户端抢先修改了的情况下通知执行这个命令的客户端,然后这个客户端进行相应的操作。(这种情况下,所有客户端都能访问数据,并进行修改)
性能问题:一般而言,如果watch的数据改变,那么监视的客户端,会重新定位watch处重新运行,那么之前运行过的命令就会重新执行。
redis分布式锁:这种锁不是给同一个进程的多线程去竞争的,也不是同一近期的多进程去竞争的,而是由不同机器上的客户端去竞争的。
1. 锁的重要性
market是市场,user是玩家,inventory是玩家包裹里拥有的物品,本次我们要解决一个问题:在市场里购买物品。
watch
我们先进行物品上架的功能