如何用redis實現訊息佇列搶單功能

2021-08-25 02:56:51 字數 985 閱讀 6124

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'已經插入進去')

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'搶到了')

db.sadd('qgdr',man)

else: # 插入資料失敗,說明已搶購,不能重複搶購

print(f'已經搶過了')

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)

redis實現訊息佇列

用redis實現乙個訊息通知系統,總結了一下技術細節,其中演示 如果沒有特殊說明,使用的都是phpredis擴充套件來實現的。記憶體 比如要推送一條全域性訊息,如果真的給所有使用者都推送一遍的話,那麼會占用很大的記憶體,實際上不管粘性有多高的產品,活躍使用者同全部使用者比起來,都會小很多,所以如果只...

redis實現訊息佇列

模擬生產者 消費者 生產者 往list資料型別中放入key為product的資料 public static void main string args 消費者 使用堵塞命令實時獲取product的資料 public static void main string args catch except...

redis 實現訊息佇列

redis 實現訊息佇列 測試 component public class timetask object obj null for int i 0 i 10 i 封裝redis工具類 slf4j component public class redisutil catch exception e...