乐观锁:这个世界是美好的,别人肯对不会在我操作数据前进行更改。在redis中,乐观锁指的是只是对key上锁,只要key不变就代表不会出问题。redis中的事务multi默认使用乐观锁,这将会导致一个问题:在秒杀这种高并发环境下,容易造成超卖问题。如,在一件商品只剩一件时,这时A用户开启事务只准备抢购,而就在A完成事务之前,B用户已经抢了这件商品,当A完成事务后,库存数量为-1。为了解决这个问题,可以引进悲观锁。
悲观锁:这个世界一切东西都是不可信的。在redis中,悲观锁指的是对数据key和都value都上锁,只要这个数据有一点小改动,事务将失败。因此上面的秒杀活动,在开启事务前,可对库存上锁:watch,只要在这个watch之后,别的进程或线程对这个库存有修改,本线程的事务将不会执行成功。