在做类似抢购活动的程序,我们通常会使用“乐观锁”思路,既保证库存不会超卖,也能够应付大并发的情况,Redis 中 watch 就可以实现“乐观锁”。
Redis 中的事务 multi/exec
可以保证数据的原子性,但不能像 Mysql 那样在事务中出错回滚数据,而用 watch
来监听数据,就可以实现类似的功能。
先用 watch
监听后,在接下来事务的过程,如果数据被修改,则在执行 exec
时,则会报错,我们可以根据业务选择重试和返回结果。
Python 中通过管道 Pipeline 来实现 Redis 事务相关操作。
初始化线程池
1 | import redis |
初始化管道
1 | pipe = r.pipeline() |
使用事务
1 | KEY = 'count' |
通过这些操作,我们可以先实现一个防止商品超卖的 demo。
代码位置 watch_demo.py
运行
1 | $ python watch_demo.py |
最近热读
扫码关注公众号,或搜索公众号“温欣爸比”
及时获取我的最新文章