日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis 优惠券秒杀逐步优化

發布時間:2024/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 优惠券秒杀逐步优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據redis set nx實現分布式鎖,防止同一用戶多次請求引起的多個線程同時下單,同時保證分布式系統下也不能同時下單,根據用戶創建唯一key,然后進行加鎖,設置鎖過期時間,防止運行過程中出現意外錯誤導致的死鎖問題,釋放鎖的時候也添加的判斷邏輯,判斷是否釋放的是當前線程加的鎖,只有當前線程添加的鎖才會被釋放,由于判斷從redis中獲取判斷結果和在java當前線程下判斷結果的非原子性,使用lua腳本解決釋放鎖的時候出現的并發安全問題,保證原子性。

同時redis集群能夠保證改鎖的高可用性和高并發性。

基于樂觀鎖解決庫存超賣問題。

setnx不可重入,不能重試(獲取鎖只嘗試一次),超時釋放(如果執行時間過長也會釋放),主從一致性問題

redission Redis的基礎上實現的Java駐內存數據網格, 提供了分布式服務

可重入鎖利用hash結構記錄線程id和重入次數

利用watchdog監控線程,每隔一段時間重置超時等待時間

重試利用信號量等待喚醒,獲取鎖失敗進入等待,當有其他線程釋放鎖的時候再喚醒

(在這里可以關聯java并發編程)。

多個獨立節點必須都獲得鎖才算成功。

把庫存預先存入redis,通過lua腳本進行秒殺操作的同時保證操作原子性,并且記錄用戶id信息,通過消息隊列將訂單信息,庫存異步存入數據庫,削峰。

,使用

壓測1000個線程同時訪問等待時間變為原來2/5,從507-216,吞吐量1.4倍

使用stream消息隊列110 1577

阻塞隊列BlockingQueue,解除耦合

內存溢出阻塞隊列內存限制,數據安全問題,丟失任務

List消息隊列,持久化,利用Redis存儲,不是用jvm內存,不直接,解決不了消息丟失問題,只支持單消費者

pubsub可以被多個消費者消費,不支持數據持久化,消息堆積有上限,緩存在消費者,jvm內存溢出

XREAD存在漏讀風險,單消費者模式

基于Stream消費者組,讀一個消息確認一個消息,從pendinglist中能獲取到為確認的消息,支持多消費者,

消息確認機制消息回溯

Stream 不能保證萬無一失,不支持生產者發送消息,消息的事務機制

總結

以上是生活随笔為你收集整理的redis 优惠券秒杀逐步优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。