阅读目录
(1)将商品投放到市场
a. 使用散列(users:)来管理市场中的所有用户信息,包括用户名、用户拥有的钱

b. 使用集合(inventory:)来管理每个用户的所有商品信息,包括商品名名

inventory:1对应用户User:1的报告
c. 使用有序集合(market:)来管理投放到市场中的商品
流程:检查inventory:1包裹中是否含有ItemL商品----->将inventory:1包裹中的ItemL商品添加到交易市场----->删除inventory:1包裹中的ItemL商品
def list_item(conn,userid,goodsname,price): #使用有序集合(market:)来管理投放到市场中的商品 #商品的key为userid:goodsid inventory = 'inventory:%s' %(userid) user = 'User:%s' %(userid) goodsitem = '%s:%s' %(userid,goodsname) end = time.time() + 5 pipe = conn.pipeline() while time.time() < end: try: pipe.watch(inventory) #监视包裹发生的变化 if not pipe.sismember(inventory,goodsname): #检查用户是否仍然持有将要被放入市场的商品 pipe.unwatch() return None pipe.multi() pipe.zadd('market:',{goodsitem:price}) #将商品投放到市场 pipe.srem(inventory, goodsname) #从用户包裹中删除该商品 pipe.execute() print('商场中的商品:',conn.zrange('market:', 0, -1,withscores=True)) print('商品投放市场后用户{}的商品:{}'.format(userid, conn.smembers(inventory))) return True except redis.exceptions.WatchError as e: print(e) return False
测试:

(2)交易:User:2购买交易市场中的中的ItemL商品
思想:使用watch对市场以及买家的个人信息进行监视,然后获取买家拥有的钱数以及商品市场的售价,并检查买家是否有足够的钱来购买商品,如果买家没有足够的钱,那么程序会取消事务,如果买家钱足够,那么程序首先会将买家支付的钱转移给卖家,然后将售出的商品移除商品交易市场。

