秒杀功能
秒杀场景现在已经非常常见了,各种电商平台都有秒杀的产品,接下来我们模拟一个秒杀的项目,最终能够确保高并发下的线程安全。界面比较简单,但是功能基本实现。
界面
点击“秒杀点我”按钮后台就会输出秒杀结果。
第一版
使用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 + "用户已经秒杀成功&#