如何在python中使用methodwatch和redis集群

ozxc1zmp  于 2021-06-10  发布在  Redis
关注(0)|答案(0)|浏览(312)

我刚接触redis集群。我有一个9节点的集群,我想创建一个python应用程序来模拟商店库存。
我正在尝试创建一个原子事务,在该事务中,我减少库存(我称之为数量)并增加某个项目(键)的已售出(npuchased)数量。
我使用的是这样一个管道,所以当有人试图购买一个项目时,它会检查库存,然后减少数量,并增加一次到服务器的采购。

def buy_item(r: RedisCluster, item_id: int) -> None:
    with r.pipeline() as pipe:
        while True:
            try:
                pipe.watch(item_id)
                amount_left = r.hget(item_id, 'quantity')

                # in stock
                if amount_left > 0:
                    pipe.multi()
                    pipe.hincrby(item_id, "quantity", -1)
                    pipe.hincrby(item_id, "npurchased", 1)
                    pipe.execute()
                    break
                else:
                    pipe.unwatch()
                    raise Exception('Out of Stock')

            except WatchError:
                print('watch error')

我使用的是rediscluster模块,似乎没有办法在集群上使用手表(只是模块中没有实现)。有没有其他方法来编写这个代码来处理这个模块,或者有更好的python模块来处理redis集群?
我也一直在学习这个教程,所以如果代码看起来很熟悉,那么你可以感谢这些家伙。他们是最真实的

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题