一个简单的秒杀例子
运用jedis来实现
实现添加pom.xml的依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
<scope>test</scope>
</dependency>
</dependencies>
创建一个实体类做监听类,实现Runable接口做公共资源
public class MyRunnable implements Runnable {
String watchkeys = "watchkeys";// 监视keys
Jedis jedis = new Jedis("10.1.60.59",6379);
public MyRunnable() {
}
public void run() {
try {
jedis.auth("123456");
jedis.watch(watchkeys);// watchkeys
String val = jedis.get(watchkeys);
int valint = Integer.valueOf(val);
String userifo = UUID.randomUUID().toString();
if (valint < 10) {
Transaction tx = jedis.multi();// 开启事务
tx.incr("watchkeys");//让变量加1
//有一个乐观锁机制
List<Object> list = tx.exec();// 提交事务,如果此时watchkeys被改动了,则返回null
if (list != null) {
System.out.println("用户:" + userifo + "抢购成功,当前抢购成功人数:"
+ (valint + 1));
/* 抢购成功业务逻辑 */
jedis.sadd("setsucc", userifo);
} else {
System.out.println("用户:" + userifo + "抢购失败");
/* 抢购失败业务逻辑 */
jedis.sadd("setfail", userifo);
}
} else {
System.out.println("用户:" + userifo + "抢购失败");
jedis.sadd("setfail", userifo);
// Thread.sleep(500);
return;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
}
/**
* 秒杀:很多人抢少量的商品的过程
* redis 测试抢购
*/
public class RedisSecKillTest {
public static void main(String[] args) {
final String watchKeys = "watchkeys";
ExecutorService executor = Executors.newFixedThreadPool(20);
final Jedis jedis = new Jedis("10.1.60.59",6379);
jedis.auth("123456");
jedis.set(watchKeys,"0");// 重置watchkeys为0
jedis.del("setsucc","setfail");// 清空抢成功的,与没有成功的
jedis.close();
for (int i = 0; i <10000 ; i++) {// 测试一万人同时访问
executor.execute(new MyRunnable());
}
executor.shutdown();
}
}
接下来我们就来测试一下
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;
public class RedisTest {
private static Jedis jedis = null;
public static void main(String[] args) {
jedis = new Jedis("10.1.60.53",6379);
jedis.auth("123456");
setString();
// setMap();
}
public static void setString(){
jedis.set("name8","刘一");
System.out.println("添加成功..");
}
public static void setMap(){
Map<String,String> map = new HashMap<String,String>();
map.put("赵九","15000");
map.put("刘十一","20000");
jedis.hmset("jiuyeMap",map);
System.out.println("添加成功..");
}
public static void setList(){
jedis.lpush("zhangs1","10000");
jedis.lpush("zhangs1","15000");
}
public static void setSet(){
jedis.sadd("lisi1","12000");
jedis.sadd("lisi1","13000");
jedis.sadd("lisi1","14000");
}
一个简单的秒杀就算完成了。
博客介绍了一个简单的秒杀例子,运用Jedis来实现。先添加pom.xml的依赖,创建一个实体类作为监听类,实现Runable接口作为公共资源,最后完成测试,一个简单的秒杀即完成。
451

被折叠的 条评论
为什么被折叠?



