今天就跟大家聊聊有關(guān)Java使用Redis實(shí)現(xiàn)一個(gè)秒殺功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:做網(wǎng)站、成都做網(wǎng)站、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。秒殺功能
秒殺場(chǎng)景現(xiàn)在已經(jīng)非常常見(jiàn)了,各種電商平臺(tái)都有秒殺的產(chǎn)品,接下來(lái)我們模擬一個(gè)秒殺的項(xiàng)目,最終能夠確保高并發(fā)下的線程安全。界面比較簡(jiǎn)單,但是功能基本實(shí)現(xiàn)。
界面
點(diǎn)擊“秒殺點(diǎn)我”按鈕后臺(tái)就會(huì)輸出秒殺結(jié)果。
第一版
使用Redis緩存數(shù)據(jù)庫(kù),使用一個(gè)key-value存儲(chǔ)秒殺商品數(shù)量,使用set集合存儲(chǔ)秒殺成功的用戶。我們以商品0101為示例,設(shè)置商品的初始數(shù)量為200件。不考慮并發(fā)問(wèn)題,實(shí)現(xiàn)功能。
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("秒殺還沒(méi)有開(kāi)始"); JedisPollTool.distroy(jedisPool, jedis); return false; } if(jedis.sismember(productUserStr, uid)) { System.out.println(uid + "用戶已經(jīng)秒殺成功"); JedisPollTool.distroy(jedisPool, jedis); return false; } int prodCount = Integer.parseInt(productCount); if(prodCount <= 0) { System.out.println("秒殺結(jié)束"); JedisPollTool.distroy(jedisPool, jedis); return false; } jedis.decr(productCountStr); jedis.sadd(productUserStr, uid); JedisPollTool.distroy(jedisPool, jedis); System.out.println(uid + "秒殺成功"); return true; } }