解決秒殺活動高並發出現負庫存(Redis)


商城在秒殺活動開始時,同時有好多人來請求這個接口,即便做了判斷庫存邏輯,也難免防止庫存出現超賣,造成損失

Django中的ORM本身就對數據庫做了防范,但再過億級訪問也扛不住

下面利用Redis的過載防止負庫存

#使用REDIS 阻止秒殺時並發狀態造成的負庫存
import redis
#定義過載
def limit_handler():
    r = redis.Redis(host='localhost', port=6379)
    """
    return True: 允許; False: 拒絕
    """
    amount_limit = 10  # 限制數量
    keyname = 'limit123'  # redis key name
    incr_amount = 1  # 每次增加數量

    # 判斷key是否存在
    if not r.exists(keyname):
        # 為了方便測試,這里設置默認初始值為95
        # setnx可以防止並發時多次設置key
        r.setnx(keyname, 0)

    # 數據插入后再判斷是否大於限制數
    if r.incrby(keyname, incr_amount) <= amount_limit:
        return True
    return False

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM