国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺

這篇具有很好參考價(jià)值的文章主要介紹了Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Redis自增功能解決全局唯一ID

  • 如果用MySQL的自增長ID,ID的規(guī)律性太明顯,會暴漏一些信息(比如銷量等)
  • 數(shù)據(jù)量太大時(shí)一張表存不下,需要多張表,MySQL多張表的自增長都是獨(dú)立的,會出現(xiàn)重復(fù)ID
  • 需要一種在分布式系統(tǒng)下可以生成全局唯一ID的工具,必須唯一且遞增
  • 在某項(xiàng)目里,不管數(shù)據(jù)庫的表有多少個(gè),Redis只有一個(gè),因此Redis遞增功能生成的ID一定是全局唯一的
  • 為了保證遞增的同時(shí)且沒有規(guī)律,保證安全性,可以在Redis自增數(shù)值的基礎(chǔ)上拼接一些其它信息
    Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺,# 數(shù)據(jù)庫,redis,數(shù)據(jù)庫,緩存

Redis實(shí)現(xiàn)優(yōu)惠券秒殺的主要思路

Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺,# 數(shù)據(jù)庫,redis,數(shù)據(jù)庫,緩存

實(shí)現(xiàn)過程中出現(xiàn)的問題及解決方法

超賣問題

  • 在高并發(fā)場景下,多個(gè)線程同時(shí)操作共享的資源(庫存),導(dǎo)致實(shí)際賣出的數(shù)量超出了庫存數(shù)量

方案1 悲觀鎖

  • 態(tài)度比較悲觀,認(rèn)為線程安全問題肯定會發(fā)生,在操作數(shù)據(jù)之前提前獲取鎖
  • 例子:Synchronized、Lock
  • 優(yōu)點(diǎn):安全性高
  • 缺點(diǎn):性能低,實(shí)現(xiàn)簡單

方案2 樂觀鎖

  • 態(tài)度比較樂觀,認(rèn)為線程安全問題不一定會發(fā)生,因此不加鎖,只在數(shù)據(jù)更新時(shí)去判斷在它之前有沒有其它線程修改數(shù)據(jù)。如果沒有修改認(rèn)為是安全的,直接更新數(shù)據(jù),如果已經(jīng)被修改說明不安全,重試或報(bào)異常
  • 版本號法:給庫存增加一個(gè)版本字段,線程1查詢并記錄下庫存和版本號,然后將庫存-1,版本號+1,來表示線程1修改了一次數(shù)據(jù),然后在更新數(shù)據(jù)之前再判斷一下版本號,是否是自己當(dāng)時(shí)記錄的版本號+1,若是,說明沒有并發(fā)線程在期間修改過數(shù)據(jù),安全,可以放心更新,若不是,說明正好有并發(fā)線程在期間修改過了數(shù)據(jù),不安全,重試或者報(bào)異常
  • CAS法:版本號法的簡化版本,去掉版本號這個(gè)多余的字段,直接用庫存本身代替版本號,根據(jù)庫存本身有沒有發(fā)生變化來確定是否更新
  • 優(yōu)點(diǎn):性能高
  • 缺點(diǎn):實(shí)現(xiàn)復(fù)雜

一人一單問題

  • 常見的業(yè)務(wù)問題,要求同一個(gè)優(yōu)惠券,一個(gè)用戶只能下一單
  • 在庫存充足判斷成功后再增加一個(gè)判斷,用用戶ID和優(yōu)惠券ID聯(lián)合查詢,來判斷該用戶是否已經(jīng)買過一優(yōu)惠券
  • 在單機(jī)模式下,可以加Synchronized鎖來保證線程安全
  • 在集群模式下,Synchronized鎖無效,需要用分布式鎖來確保線程安全。Synchronized鎖無效的原因是因?yàn)槊颗_服務(wù)器有自己的常量池,鎖監(jiān)視器便保存在常量池中,用戶嘗試獲取鎖便是訪問鎖監(jiān)視器,因此,主要問題是因?yàn)槎鄠€(gè)服務(wù)器的鎖監(jiān)視器是獨(dú)立的,所以多個(gè)服務(wù)器上的用戶能在同一時(shí)刻同時(shí)獲取鎖,進(jìn)而導(dǎo)致線程安全問題

分布式鎖

  • 在單機(jī)情況下,只有一個(gè)JVM,JVM中只有一個(gè)鎖監(jiān)視器,只有一個(gè)程序可以獲取到鎖。但在集群情況下,有多個(gè)JVM,多個(gè)JVM中有多個(gè)鎖監(jiān)視器,程序可以獲取到多個(gè)鎖,甚至同一個(gè)程序也可以獲得多個(gè)鎖,就會出現(xiàn)線程安全問題
  • 需要在多個(gè)JVM之外做一個(gè)共享的 多進(jìn)程可見的 互斥的 鎖監(jiān)視器——分布式鎖
  • 實(shí)現(xiàn)分布式鎖的三大方式:MySQL、Redis、Zookeeper,MySQL和Zookeeper比Redis安全性更好,Redis性能比二者更好
    Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺,# 數(shù)據(jù)庫,redis,數(shù)據(jù)庫,緩存
如何用Redis實(shí)現(xiàn)分布式鎖?
  • 獲取互斥鎖:SET lock thread1 NX EX 10,NX是互斥,確保只有一個(gè)線程可以獲取到鎖,EX是設(shè)置超時(shí)時(shí)間。
  • 釋放鎖:直接手動刪除。
  • 死鎖問題:若獲取到鎖后線程宕機(jī),容易出現(xiàn)死鎖,應(yīng)該增加過期時(shí)間,超時(shí)自動釋放鎖。
  • 誤刪問題:若線程1獲取到鎖,但業(yè)務(wù)執(zhí)行時(shí)間過長,超過了TTL,會自動釋放鎖,此時(shí)線程2嘗試獲取鎖成功,并正常執(zhí)行業(yè)務(wù),但期間線程1業(yè)務(wù)執(zhí)行完畢,正常執(zhí)行釋放鎖操作,此時(shí)就會把線程2的鎖誤刪。為了避免這種情況,應(yīng)該在獲取鎖時(shí)增加一個(gè)標(biāo)識,來表示誰占有了這個(gè)鎖,且只有它才有資格釋放鎖,因此在釋放鎖之前需要增加判斷步驟
  • 基于setnx實(shí)現(xiàn)的分布式鎖存在的問題:不可重入(同一個(gè)線程無法多次獲取同一把鎖),不可重試(獲取鎖只嘗試一次,失敗不會重試),超時(shí)釋放(業(yè)務(wù)執(zhí)行耗時(shí)較長會導(dǎo)致鎖釋放,存在安全隱患)
  • Redission組件:Redis基礎(chǔ)上實(shí)現(xiàn)的分布式工具集合

Redis優(yōu)化秒殺

  • 優(yōu)化主要思路:將涉及到數(shù)據(jù)庫的減庫存創(chuàng)建訂單等耗時(shí)操作用異步獨(dú)立線程慢慢做,Redis只需要判斷用戶有沒有搶成功并返回結(jié)果
  • 原來的秒殺流程:主要是Tomcat里面的一系列操作,有四個(gè)會直接操作數(shù)據(jù)庫,耗時(shí)非常久。相當(dāng)于一個(gè)飯店,來了一位顧客,派了一個(gè)服務(wù)員為這位顧客一條龍服務(wù),從點(diǎn)菜(查詢秒殺資格)到做飯(減庫存和創(chuàng)建訂單)都是這一個(gè)服務(wù)員做,效率非常低下。
  • 優(yōu)化后的秒殺流程:在NGINX和Tomcat之家增加Redis,用于判斷該用戶能不能搶上優(yōu)惠券,并將判斷結(jié)果和優(yōu)惠券id、用戶id、訂單id一起保存到阻塞隊(duì)列,然后Tomcat從隊(duì)列中讀取消息,進(jìn)行比較耗時(shí)的減庫存和創(chuàng)建訂單操作
    Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺,# 數(shù)據(jù)庫,redis,數(shù)據(jù)庫,緩存
  • 其中Redis判斷秒殺庫存的操作可以封裝到Lua腳本中執(zhí)行,以確保該操作的原子性
    Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺,# 數(shù)據(jù)庫,redis,數(shù)據(jù)庫,緩存
  • 基于阻塞隊(duì)列的異步秒殺存在的問題?
  • 阻塞隊(duì)列用的時(shí)JDK的,會占用JVM內(nèi)存,大量消息會造成內(nèi)存溢出

消息隊(duì)列實(shí)現(xiàn)異步秒殺

  • 消息隊(duì)列:存儲管理消息
  • 生產(chǎn)者:發(fā)送消息到消息隊(duì)列
  • 消費(fèi)者:從消息隊(duì)列獲取消息并處理消息
  • Redis實(shí)現(xiàn)消息隊(duì)列的三種方式:List、發(fā)布訂閱模式、Stream

List

  • 鏈?zhǔn)降碾p端隊(duì)列,LPUSH存,RPOP取,但并沒有阻塞效果(隊(duì)列空時(shí)不會阻塞等待),BRPOP有阻塞效果。
  • 優(yōu)點(diǎn):獨(dú)立于JVM存在,不占JVM內(nèi)存,不擔(dān)心上限,且可以持久化,還能保證消息有序性
  • 缺點(diǎn):無法避免消息丟失,只支持一對一

發(fā)布訂閱模式

  • 消費(fèi)者訂閱一個(gè)或多個(gè)channel,生產(chǎn)者向?qū)?yīng)channel發(fā)送消息
  • 優(yōu)點(diǎn):支持一對多,一個(gè)生產(chǎn)者可以把消息發(fā)給多個(gè)消費(fèi)者。天生支持阻塞
  • 缺點(diǎn):不支持?jǐn)?shù)據(jù)持久化,無法避免消息丟失,消息堆積有上限

Stream

  • 優(yōu)點(diǎn):消息可回溯,支持一對多,支持阻塞讀取
  • 缺點(diǎn):可能會漏讀消息
  • 消費(fèi)者組:將多個(gè)消費(fèi)者劃分到一個(gè)組中,監(jiān)聽同一個(gè)消息隊(duì)列,那么多個(gè)消費(fèi)者就會競爭這些消息,可以加快處理消息的速度,避免消息堆積。消費(fèi)者組還會維護(hù)一個(gè)標(biāo)識,記錄最后一個(gè)被處理的消息,可以很快恢復(fù)突發(fā)情況,避免漏讀消息。此外,消費(fèi)者拿到消息后,Redis并不會直接不管這條消息,而是將消息置為pending狀態(tài),表示這條消息取上了但還沒處理完,處理完后通過XACK確認(rèn)消息,標(biāo)記為已處理,此時(shí)Redis才會放心地把消息從隊(duì)列中移除,可以防止消息丟失。
  • 消費(fèi)者組優(yōu)點(diǎn):消息可回溯,可以多消費(fèi)者爭搶消息,加快消費(fèi)速度,可以阻塞讀取,不會漏讀消息,有消息確認(rèn)機(jī)制,保證消息至少被消費(fèi)一次

三種消息隊(duì)列對比總結(jié)
Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺,# 數(shù)據(jù)庫,redis,數(shù)據(jù)庫,緩存文章來源地址http://www.zghlxwxcb.cn/news/detail-687664.html

到了這里,關(guān)于Redis項(xiàng)目實(shí)戰(zhàn)——優(yōu)惠券秒殺的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【java爬蟲】將優(yōu)惠券數(shù)據(jù)存入數(shù)據(jù)庫排序查詢

    【java爬蟲】將優(yōu)惠券數(shù)據(jù)存入數(shù)據(jù)庫排序查詢

    本文是在之前兩篇文章的基礎(chǔ)上進(jìn)行寫作的 (1條消息) 【java爬蟲】使用selenium爬取優(yōu)惠券_haohulala的博客-CSDN博客 (1條消息) 【java爬蟲】使用selenium獲取某寶聯(lián)盟淘口令_haohulala的博客-CSDN博客? 前兩篇文章介紹了如何獲取優(yōu)惠券的基礎(chǔ)信息,本文將獲取到的基本信息存到數(shù)據(jù)庫中

    2024年02月16日
    瀏覽(26)
  • 小程序中如何核銷訂單和優(yōu)惠券

    小程序中如何核銷訂單和優(yōu)惠券

    小程序已成為許多商家線上線下開展業(yè)務(wù)的重要渠道??蛻粼谛〕绦蛑邢聠?領(lǐng)券后,可能需要商家現(xiàn)場掃碼核銷,例如超市購物、賣票、游樂園等線下場景。下面就介紹小程序中如何核銷訂單和優(yōu)惠券。 一、訂單核銷 訂單核銷是指商家在小程序中確認(rèn)顧客已經(jīng)支付的訂單并

    2024年03月21日
    瀏覽(39)
  • 微信小程序?qū)崿F(xiàn)一些優(yōu)惠券/卡券

    微信小程序?qū)崿F(xiàn)一些優(yōu)惠券/卡券

    ?? 前幾周有小伙伴問我如何用css實(shí)現(xiàn)一些優(yōu)惠券/卡券,今天就來分享一波吧!速速來Get吧~ ??文末分享源代碼。記得點(diǎn)贊+關(guān)注+收藏! 2.1 實(shí)現(xiàn)內(nèi)凹圓角 假設(shè)我們要實(shí)現(xiàn)這樣的一個(gè)效果,兩側(cè)透明內(nèi)圓角+外側(cè)投影,有幾種實(shí)現(xiàn)方式呢? 2.1.1 方法一:半圓偽元素(投影不準(zhǔn)確

    2024年02月09日
    瀏覽(21)
  • 機(jī)器學(xué)習(xí):基于邏輯回歸對優(yōu)惠券使用情況預(yù)測分析

    機(jī)器學(xué)習(xí):基于邏輯回歸對優(yōu)惠券使用情況預(yù)測分析

    作者:i阿極 作者簡介:Python領(lǐng)域新星作者、多項(xiàng)比賽獲獎(jiǎng)?wù)撸翰┲鱾€(gè)人首頁 ??????如果覺得文章不錯(cuò)或能幫助到你學(xué)習(xí),可以點(diǎn)贊??收藏??評論??+關(guān)注哦!?????? ??????如果有小伙伴需要數(shù)據(jù)集和學(xué)習(xí)交流,文章下方有交流學(xué)習(xí)區(qū)!一起學(xué)習(xí)進(jìn)步!?? 訂閱專欄案

    2024年02月02日
    瀏覽(25)
  • 兩天擼一個(gè)優(yōu)惠券小程序,記錄下開發(fā)的小小經(jīng)驗(yàn)

    兩天擼一個(gè)優(yōu)惠券小程序,記錄下開發(fā)的小小經(jīng)驗(yàn)

    下載微信開發(fā)者工具???? 新建項(xiàng)目文件夾project,比如 D:workProjectproject 在project下創(chuàng)建src目錄放微信小程序的源碼,.gitignore文件是用來git上傳gitee上忽略一些文件用的,另外三個(gè)js文件時(shí)用來混淆小程序源碼的腳本,將腳本和小程序源碼分開是為了腳本更好處理混淆過程。

    2023年04月08日
    瀏覽(22)
  • 【實(shí)踐篇】教你玩轉(zhuǎn)JWT認(rèn)證---從一個(gè)優(yōu)惠券聊起

    【實(shí)踐篇】教你玩轉(zhuǎn)JWT認(rèn)證---從一個(gè)優(yōu)惠券聊起

    最近面試過程中,無意中跟候選人聊到了JWT相關(guān)的東西,也就聯(lián)想到我自己關(guān)于JWT落地過的那些項(xiàng)目。 關(guān)于JWT,可以說是分布式系統(tǒng)下的一個(gè)利器,我在我的很多項(xiàng)目實(shí)踐中,認(rèn)證系統(tǒng)的第一選擇都是JWT。它的優(yōu)勢會讓你欲罷不能,就像你領(lǐng)優(yōu)惠券一樣。 大家回憶一下一個(gè)

    2024年02月05日
    瀏覽(24)
  • 智慧影院--java開源電影票優(yōu)惠券制作系統(tǒng)快速開發(fā)

    智慧影院--java開源電影票優(yōu)惠券制作系統(tǒng)快速開發(fā)

    搭建一個(gè)智慧影院可以通過使用Java開源電影票優(yōu)惠券制作系統(tǒng)來快速開發(fā)。這個(gè)系統(tǒng)可以幫助影院管理電影票的銷售和優(yōu)惠活動,提供便捷的購票方式和優(yōu)惠券的生成與使用功能。 首先,我們需要建立一個(gè)數(shù)據(jù)庫來存儲電影、影廳、放映計(jì)劃、訂單等信息。在數(shù)據(jù)庫中,我

    2024年02月13日
    瀏覽(17)
  • 淘寶APP商品詳情接口(商品信息,價(jià)格銷量,優(yōu)惠券信息,詳情圖等)

    淘寶APP商品詳情接口(商品信息,價(jià)格銷量,優(yōu)惠券信息,詳情圖等)

    淘寶APP商品詳情接口(商品信息接口,價(jià)格銷量接口,優(yōu)惠券信息接口,詳情圖接口等)代碼對接如下: 公共參數(shù) 名稱 類型 必須 描述 key String 是 調(diào)用key(必須以GET方式拼接在URL中),點(diǎn)擊獲取請key和secret secret String 是 調(diào)用密鑰 api_name String 是 API接口名稱(包括在請求地址

    2024年02月12日
    瀏覽(28)
  • 業(yè)務(wù)安全情報(bào)第16期 | 大促8成優(yōu)惠券竟被“羊毛黨”搶走!?

    近期,某電商小程序舉辦美食節(jié)營銷活動,提供高額折扣券,并允許用戶進(jìn)行秒殺。然而,羊毛黨團(tuán)伙利用作弊手段,搶購囤券,然后倒賣變現(xiàn),嚴(yán)重?fù)p害了商家的利益。 根據(jù)頂象防御云編號為BSI-2023-rutq業(yè)務(wù)安全情報(bào)發(fā)現(xiàn),某電商平臺為吸引人氣和促進(jìn)銷售推,推出高額折

    2024年02月07日
    瀏覽(31)
  • 斐訊1200M四天線雙頻路由器PSG1208只要88元 快來領(lǐng)取優(yōu)惠券

    斐訊斐賽克斯專賣店針對1200M斐訊PSG1208無線路由器啟動淘搶購活動,現(xiàn)價(jià)88元(原價(jià)98元),其擁有1200M傳輸速率、2.4G/5.8G雙頻并發(fā)、WISP中繼等特性。 立刻下單 。 斐訊PSG1208使用802.11ac協(xié)議,2.4G/5.8G雙頻并發(fā),數(shù)據(jù)傳輸速率達(dá)1167Mbps;配以聯(lián)發(fā)科SOC MT7620A處理器、4天線4*4MIMO架構(gòu)

    2024年02月08日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包