25,989
社区成员




//单机秒杀实现
AtomicBoolean hadDone = new AtomicBoolean(false);
AtomicLong total = new AtomicLong(100L);
public boolean miaoSha(){
if (!hadDone.get()) {
//是否已经减 到0
if(total.decrementAndGet() > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
//SET miaoSha 100
AtomicBoolean hadDone = new AtomicBoolean(false);
Jedis jedis = new Jedis("127.0.0.1");
public boolean miaoSha(){
if (!hadDone.get()) {
if(jedis.decr("miaoSha") > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
[/quote]
这样也不行,redis有单点问题,redis挂掉咋办,秒杀里面很多组件都是用的集群[/quote]
redis可以搞成集群。//SET miaoSha 100
AtomicBoolean hadDone = new AtomicBoolean(false);
Jedis jedis = new Jedis("127.0.0.1");
public boolean miaoSha(){
if (!hadDone.get()) {
if(jedis.decr("miaoSha") > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
[/quote]
这样也不行,redis有单点问题,redis挂掉咋办,秒杀里面很多组件都是用的集群//SET miaoSha 100
AtomicBoolean hadDone = new AtomicBoolean(false);
Jedis jedis = new Jedis("127.0.0.1");
public boolean miaoSha(){
if (!hadDone.get()) {
if(jedis.decr("miaoSha") > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
[/quote]//SET miaoSha 100
AtomicBoolean hadDone = new AtomicBoolean(false);
Jedis jedis = new Jedis("127.0.0.1");
public boolean miaoSha(){
if (!hadDone.get()) {
if(jedis.decr("miaoSha") > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
//SET miaoSha 100
AtomicBoolean hadDone = new AtomicBoolean(false);
Jedis jedis = new Jedis("127.0.0.1");
public boolean miaoSha(){
if (!hadDone.get()) {
if(jedis.decr("miaoSha") > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
[/quote][/quote]
那里不需要线程安全,只是一个简单的缓存位,这一步是jedis.decr("miaoSha")线程安全的就可以了。[/quote]//SET miaoSha 100
AtomicBoolean hadDone = new AtomicBoolean(false);
Jedis jedis = new Jedis("127.0.0.1");
public boolean miaoSha(){
if (!hadDone.get()) {
if(jedis.decr("miaoSha") > 0){
//秒杀成功
return true;
}else {
hadDone.set(true);
}
}
//秒杀失败
return false;
}
[/quote][/quote]
那里不需要线程安全,只是一个简单的缓存位,这一步是jedis.decr("miaoSha")线程安全的就可以了。