日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java使用Redis實現秒殺功能

瀏覽:16日期:2022-08-23 14:24:44

秒殺功能

秒殺場景現在已經非常常見了,各種電商平臺都有秒殺的產品,接下來我們模擬一個秒殺的項目,最終能夠確保高并發下的線程安全。界面比較簡單,但是功能基本實現。

界面

Java使用Redis實現秒殺功能

點擊“秒殺點我”按鈕后臺就會輸出秒殺結果。

Java使用Redis實現秒殺功能

第一版

使用Redis緩存數據庫,使用一個key-value存儲秒殺商品數量,使用set集合存儲秒殺成功的用戶。我們以商品0101為示例,設置商品的初始數量為200件。不考慮并發問題,實現功能。

html、jsp、servlet文件不重要省略。

package com.redis.secondskill; import java.util.List; import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.Transaction; public class SS0 { public static boolean doSecKill(String uid,String prodid) { JedisPool jedisPool = JedisPollTool.getInstance(); Jedis jedis = jedisPool.getResource(); String productCountStr = 'sec:'+prodid+':count'; String productUserStr = 'sec:'+prodid+':user'; String productCount = jedis.get(productCountStr); if(null == productCount) { System.out.println('秒殺還沒有開始'); JedisPollTool.distroy(jedisPool, jedis); return false; } if(jedis.sismember(productUserStr, uid)) { System.out.println(uid + '用戶已經秒殺成功'); JedisPollTool.distroy(jedisPool, jedis); return false; } int prodCount = Integer.parseInt(productCount); if(prodCount <= 0) { System.out.println('秒殺結束'); JedisPollTool.distroy(jedisPool, jedis); return false; } jedis.decr(productCountStr); jedis.sadd(productUserStr, uid); JedisPollTool.distroy(jedisPool, jedis); System.out.println(uid + '秒殺成功'); return true; }}

使用linux httpd-tools工具進行并發測試。

ab -n 1000 -c 200 -p /test/file.txt -T 'application/x-www-form-urlencoded' 192.168.0.101:8080/redis-demo/ss

結果

Java使用Redis實現秒殺功能

從結果大致來看,沒有什么問題,來查看一個后臺Redis的數據

秒殺的結果里面居然有負數,證明賣超了。

Java使用Redis實現秒殺功能

第二版

使用Redis的事務,保證沒有超賣的情況發生。

package com.redis.secondskill; import java.util.List; import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.Transaction; public class SS1 { public static boolean doSecKill(String uid,String prodid) { JedisPool jedisPool = JedisPollTool.getInstance(); Jedis jedis = jedisPool.getResource(); String productCountStr = 'sec:'+prodid+':count'; String productUserStr = 'sec:'+prodid+':user'; jedis.watch(productCountStr); //開始監視 String productCount = jedis.get(productCountStr); if(null == productCount) { System.out.println('秒殺還沒有開始'); JedisPollTool.distroy(jedisPool, jedis); return false; } if(jedis.sismember(productUserStr, uid)) { System.out.println(uid + '用戶已經秒殺成功'); JedisPollTool.distroy(jedisPool, jedis); return false; } int prodCount = Integer.parseInt(productCount); if(prodCount <= 0) { System.out.println('秒殺結束'); JedisPollTool.distroy(jedisPool, jedis); return false; } Transaction transaction = jedis.multi(); transaction.decr(productCountStr); transaction.sadd(productUserStr, uid); List<Object> exec = transaction.exec(); if(exec == null || exec.size() == 0) { System.out.println('秒殺失敗,稍后重試'); JedisPollTool.distroy(jedisPool, jedis); return false; } JedisPollTool.distroy(jedisPool, jedis); System.out.println(uid + '秒殺成功'); return true; }}

結果

Java使用Redis實現秒殺功能

由于使用了watch和事務,每次的并發線程訪問中只有一個線程能夠提交成功,可以保證不出現超賣的現象,但是對于一些用戶來說是極其不公平的。

第三版

使用Lua腳本來實現,因為Redis是單線程的,又是C語言編寫的,可以使用Lua調用Redis的命令,Lua會具有排他性,所以能夠保證安全。

package com.redis.secondskill; import java.util.HashSet;import java.util.Set; import redis.clients.jedis.HostAndPort;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool; public class SS2 { static String luaScript ='local userid=KEYS[1];rn' + 'local prodid=KEYS[2];rn' + 'local qtkey=’sec:’..prodid..':count';rn' + 'local usersKey=’sec:’..prodid..':user';rn' + 'local userExists=redis.call('sismember',usersKey,userid);rn' + 'if tonumber(userExists)==1 then rn' + ' return 2;rn' + 'endrn' + 'local num = redis.call('get' ,qtkey);rn' + 'if tonumber(num)<=0 then rn' + ' return 0;rn' + 'else rn' + ' redis.call('decr',qtkey);rn' + ' redis.call('sadd',usersKey,userid);rn' + 'endrn' + 'return 1' ; public static boolean doSecKill(String uid,String prodid) { JedisPool jedisPool = JedisPollTool.getInstance(); Jedis jedis = jedisPool.getResource(); String sha1 = jedis.scriptLoad(luaScript); Object result= jedis.evalsha(sha1, 2, uid,prodid); String reString=String.valueOf(result); if ('0'.equals( reString ) ) { System.err.println('已搶空!!'); }else if('1'.equals( reString ) ) { System.out.println(uid + '搶購成功?。。?!'); }else if('2'.equals( reString ) ) { System.err.println('該用戶已搶過??!'); }else{ System.err.println('搶購異常?。?); } JedisPollTool.distroy(jedisPool, jedis); return true; }}

結果

Java使用Redis實現秒殺功能

這才是我們最希望看到的結果!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
高清一区二区三区av| 91精品尤物| 国产精品蜜芽在线观看| 久久av资源| 麻豆视频一区二区| 免费一区二区三区在线视频| 另类小说一区二区三区| 精品国产中文字幕第一页| 国产极品久久久久久久久波多结野| 国产精品网站在线看| 国产精品videosex极品| 国产在线日韩精品| sm捆绑调教国产免费网站在线观看| 欧美aa在线视频| 国产+成+人+亚洲欧洲在线| 午夜精品成人av| 日韩视频在线一区二区三区| 99亚洲视频| 日韩高清电影免费| 美女国产一区二区三区| 老牛影视精品| 欧美成人高清| 亚洲免费一区三区| 国产精品欧美在线观看| 国际精品欧美精品| 久久五月天小说| 免费观看日韩电影| 国产欧美日韩一级| 中文字幕成在线观看| 欧美日韩视频一区二区三区| 中文字幕一区二区三区四区久久| 欧美精品中文字幕亚洲专区| 精品一区二区三区免费看| 日韩三区免费| 美国欧美日韩国产在线播放| 国产精品自在| 久久影视一区| 日韩中文一区二区| 国产一区二区三区网| 自拍日韩欧美| 国产欧美日韩在线一区二区 | 69精品国产久热在线观看| 国产精品大片| 亚洲不卡系列| 午夜性色一区二区三区免费视频| 精品视频一区二区三区四区五区| 蜜桃国内精品久久久久软件9| 日韩1区2区3区| 欧美日韩视频网站| 婷婷成人av| 日韩在线欧美| 亚洲精品看片| 日韩欧美一区二区三区免费看| 激情婷婷亚洲| 久久精品超碰| 国精品一区二区| 欧美影院精品| 99久久视频| 国产美女精品视频免费播放软件| 久久精品99久久无色码中文字幕| 日本欧美一区| 国产精品99一区二区| 国产精品欧美日韩一区| 欧美日韩水蜜桃| 国产午夜精品一区在线观看| 欧美va亚洲va日韩∨a综合色| 国产精品3区| 蘑菇福利视频一区播放| 久久精品一本| 少妇精品久久久一区二区三区| 成人福利视频| 国产精品入口久久| 亚洲日韩中文字幕一区| 日本久久成人网| 麻豆91精品91久久久的内涵| 亚洲乱码一区| 91精品观看| 日韩av免费大片| 欧美精品中文| 免费在线观看视频一区| 日韩久久精品| 久久超级碰碰| 日韩激情av在线| 国产主播一区| av在线最新| 久久亚洲资源中文字| 深夜福利一区| 久久亚洲二区| 九一成人免费视频| 日本在线精品| 麻豆理论在线观看| 麻豆精品视频在线| 日韩一区二区三区高清在线观看 | 视频一区中文字幕精品| 99日韩精品| 极品日韩av| 国产精品伦理久久久久久| 国产亚洲欧美日韩精品一区二区三区| 国产亚洲精品v| 精品一区免费| 亚洲成av人片一区二区密柚| 久久亚洲精品中文字幕| 国产精品qvod| 国产精品一区二区av交换| 日韩一区二区三区免费视频| 亚洲午夜免费| 伊人www22综合色| 美女精品在线| 亚洲自啪免费| 香蕉精品999视频一区二区| 欧美福利一区| 国产超碰精品| 日韩精品专区| 日韩一区二区三区在线免费观看| 日韩免费视频| 蜜桃精品在线| 欧美日韩一二三四| 欧美+亚洲+精品+三区| 欧美精品日日操| 欧美精品资源| 国产精品7m凸凹视频分类| 91精品99| 免费欧美在线视频| 视频一区日韩精品| 日本亚洲不卡| 国产日韩三级| 69堂免费精品视频在线播放| 欧美精品国产| 国产高清视频一区二区| 老司机精品视频网| 国产精选在线| 欧美午夜精彩| 国产精品女主播一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频| 日韩中文字幕亚洲一区二区va在线| 蜜臀av一区二区三区| 亚洲精品系列| 国产精品一级在线观看| 精品淫伦v久久水蜜桃| 欧美精品高清| 黄色日韩在线| 视频在线观看91| 日本伊人午夜精品| 国产精品最新| 日韩欧美视频专区| 999在线观看精品免费不卡网站| 免费在线观看日韩欧美| 国产免费播放一区二区| 国产va在线视频| 亚洲精品小说| 日韩av网站免费在线| 97精品一区| 亚洲免费播放| 欧美亚洲tv| 精品不卡一区| 女主播福利一区| 亚洲日产av中文字幕| 久久丁香四色| 婷婷久久一区| 日韩精品91亚洲二区在线观看| 欧美激情网址| 久久麻豆精品| 欧美日韩1区| 天堂日韩电影| 日韩免费精品| 四虎4545www国产精品 | 日韩动漫一区| 高清不卡亚洲| 久久福利影视| 久久亚洲精精品中文字幕| 色婷婷久久久| 四虎精品永久免费| 日韩成人精品一区| 六月婷婷一区| 国产一区二区三区亚洲| 99国产精品久久久久久久 | 国产一区二区三区四区二区| 黄色精品网站| 91亚洲精品在看在线观看高清| 色婷婷亚洲mv天堂mv在影片| 国产亚洲精品久久久久婷婷瑜伽| 久久wwww| 日韩精品一级二级 | 丝袜亚洲另类欧美| 麻豆精品一区二区综合av| 欧美日韩国产传媒| 国产精品亲子伦av一区二区三区| 性欧美xxxx免费岛国不卡电影| 国产调教一区二区三区| 亚洲女同一区| 免费精品一区| 老牛影视一区二区三区| 成人在线视频免费| 亚洲三级国产| 成人久久一区| 日本欧美一区二区| 宅男在线一区| 久久午夜影院| 色狠狠一区二区三区| 欧美二三四区|