<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在開發過程中高並行問題是很棘手的一個問題(對於博主這樣的小菜雞來說),當我們學習redis之前,知道redis是單執行緒執行的所以任務不會出現執行緒不安全問題。當我們在linux中使用ab來模擬高並行秒殺時可能會遇到兩種問題,“超時和超賣”。
(1)虛擬機器器中的設定問題
我們在測試遠端連線時redis連線是否成功時控制檯可能會報以下錯誤。
如下所示:
每次看到控制檯紅色的文字我就頭疼。。。
在控制檯中的顯示大概意思是顯示連線超時導致了失敗。
總結了以下三條連線失敗原因:
之後如果遇到了以上問題請自行查詢。
(2)redis成功連線中模擬在高並行中的超時
如圖所示:
在MySQL中使用jdbc可能會發現連線超時問題,所以我們使用了資料庫連線池來解決問題,例如druid、c3p0等等。同理我們在redis中也可以同樣使用資料庫連線池。
節省每次連線redis服務帶來的消耗,把連線好的範例反覆利用。
通過引數管理連線的行為
直接上記事本程式碼!
連結池引數:
在高並行場景下,多個執行緒並行更新庫存,導致庫存為負的情況。
看圖幻想:
上圖:
//增加樂觀鎖 jedis.watch(qtkey); //3.判斷庫存 String qtkeystr = jedis.get(qtkey); if(qtkeystr==null || "".equals(qtkeystr.trim())) { System.out.println("未初始化庫存"); jedis.close(); return false ; } int qt = Integer.parseInt(qtkeystr); if(qt<=0) { System.err.println("已經秒光"); jedis.close(); return false; } //增加事務 Transaction multi = jedis.multi(); //4.減少庫存 //jedis.decr(qtkey); multi.decr(qtkey); //5.加人 //jedis.sadd(usrkey, uid); multi.sadd(usrkey, uid); //執行事務 List<Object> list = multi.exec(); //判斷事務提交是否失敗 if(list==null || list.size()==0) { System.out.println("秒殺失敗"); jedis.close(); return false; } System.err.println("秒殺成功"); jedis.close();
方案原理:
(1)當用戶購買時,通過watch來監視庫存,如果庫存在watch監視後發生改變,就會捕獲異常而放棄對庫存進行減一操作。
(2)如果庫存沒有監視到變化並且數量大於一時,則庫存減一,並且執行任務。
弊端
Redis 在嘗試完成一個事務的時候,可能會因為事務的失敗而重複嘗試重新執行
保證商品的庫存量正確是一件很重要的事情,但是單純的使用 WATCH 這樣的機制對伺服器壓力過大
為什麼要自己構建鎖?
雖然有類似的 SETNX 命令可以實現 Redis 中的鎖的功能,但他鎖提供的機制並不完整
並且setnx也不具備分散式鎖的一些高階特性,還是得通過我們手動構建。
(1)建立一個redis鎖
在 Redis 中,可以通過使用 SETNX 命令來構建鎖:rs.setnx(lock_name, uuid值)
而鎖要做的事情就是將一個隨機生成的 128 位 UUID 設定位鍵的值,防止該鎖被其他程序獲取。
(2)釋放鎖
鎖的刪除操作很簡單,只需要將對應鎖的 key 值獲取到的 uuid 結果進行判斷驗證
符合條件(判斷uuid值)通過 delete 在 redis 中刪除即可,rs.delete(lockname)
此外當其他使用者持有同名鎖時,由於 uuid 的不同,經過驗證後不會錯誤釋放掉別人的鎖.
(3)解決鎖無法釋放問題
在之前的鎖中,還出現這樣的問題,比如某個程序持有鎖之後突然程式崩潰,那麼會導致鎖無法釋放
而其他程序無法持有鎖繼續工作,為了解決這樣的問題,可以在獲取鎖的時候加上鎖的超時功能。
到此這篇關於Redis中秒殺場景下超時與超賣問題的解決方案的文章就介紹到這了,更多相關Redis 超時與超賣內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45