如何用redis实现消息队列抢单功能

import time
import redis
# 连接数据库
db = redis.Redis(host='192.168.3.2',port = 6379,decode_responses = False) # 连接redis数据库
print('连上了')

def phone_into(phone_name): # 将待抢购商品加入到redis队列中
    db.lpush('phone_lists',phone_name)
    print(f'{phone_name}已经插入进去')
    print(db.lrange('phone_lists',0,-1))  # 展出当前redis队列中存在哪些商品

def qsj(man):  # 实现抢购
    if not db.llen('phone_lists'):
        print('抢完了')
        return
    if db.sadd('qgdr',man):  # 如果插入成功(插入成功会返回1,插入失败会返回0),说明该人员未抢购
        print('当前剩余商品',db.lrange('phone_lists', 0, -1)) # 展示出当前redis队列中剩余哪些商品
        print(f'{man}抢到了{db.rpop("phone_lists")}')
        db.sadd('qgdr',man)
    else:  # 插入数据失败,说明已抢购,不能重复抢购
        print(f'{man}已经抢过了')

if __name__ == '__main__':
    db.flushdb()
    for phone in ['phone1','phone2','phone3','phone4']:
        phone_into(phone)
    print('已插入完毕,开枪')
    time.sleep(2)
    for x in ['a','b','c','a','b','c','f','g','h']:
        qsj(x)

 

你可能感兴趣的:(数据库操作,python)