redisは秒殺を実現
2555 ワード
1.環境準備
eclipse + redis
2.具体的な実現
需要:ある会社は秒殺の一環を実現して、100台の携帯電話(具体的なもの、自分で設置します)
2.1 redisサービスの起動
1.redisサービス側の起動(バックグラウンド運転) DOSウィンドウ に入る redisへのインストールディレクトリ 入力:redis-server--service-install redis.windows.conf--loglevel verbose(redisサービスのインストール) 入力:redis-server--service-start(サービス開始) 入力:redis-server--service-stop 2.2コードを具体的に実現する
エントリクラス
具体的なビジネスロジック
1000人が同時に100台の携帯電話を買い占めることをシミュレートして、redisを使ってして、redisは単一のスレッドの操作で、事務が破壊される時、現在の事務は破壊されて、多くの人が買い取る効果を達成します
具体コード:コードクラウドhttps://gitee.com/zhangqiye/redis_second_kill/tree/master/Redis
群を加えて共同で検討することもできる:552113611
ようこそfd
eclipse + redis
2.具体的な実現
需要:ある会社は秒殺の一環を実現して、100台の携帯電話(具体的なもの、自分で設置します)
2.1 redisサービスの起動
1.redisサービス側の起動(バックグラウンド運転)
エントリクラス
public class MainController {
public static void main(String[] args) {
String key="shouji";
int num=100;
Jedis jedis = new Jedis("localhost");
jedis.set(key, num+"");
jedis.close();
//
ExecutorService threadPool = Executors.newFixedThreadPool(20);
//
for (int i =0; i < 1000; i++) {
// new Run("user"+i,key,num)
threadPool.execute(new Run("user"+i,key,num));
}
threadPool.shutdown();
}
}
具体的なビジネスロジック
public class Run implements Runnable{
private String key;
private String name;
private int num;
public Run(String name,String key,int num) {
this.name = name;
this.key = key;
this.num = num;
}
Jedis jedis = new Jedis("localhost");
@Override
public void run() {
//redis key, key ,
jedis.watch(key);
String string = jedis.get(key);
//
int currentnum = Integer.parseInt(string);
if (currentnum <= num && currentnum >= 1) {
//
//
Transaction multi = jedis.multi();
//
multi.incrBy(key,-1);
// . ,
List
1000人が同時に100台の携帯電話を買い占めることをシミュレートして、redisを使ってして、redisは単一のスレッドの操作で、事務が破壊される時、現在の事務は破壊されて、多くの人が買い取る効果を達成します
具体コード:コードクラウドhttps://gitee.com/zhangqiye/redis_second_kill/tree/master/Redis
群を加えて共同で検討することもできる:552113611
ようこそfd