redisによる高併発秒殺のJAVA-DEMO実現!redis watch楽観ロックに基づく
2190 ワード
public static void testWatch() throws Exception {
Jedis jedis = null;
try {
jedis = ConnectionManager.getConnection();// jedis
String key_s = "user_name";//
String key = "test_count";//
String clientName = UUID.randomUUID().toString().replace("-", "");//
while (true) {
try {
jedis.watch(key);// key
System.out.println(" :" + clientName + " ");
System.out.println(" :" + jedis.get(key));
int prdNum = Integer.parseInt(jedis.get(key));//
if (prdNum > 0) {
Transaction transaction = jedis.multi();//
transaction.set(key, String.valueOf(prdNum - 1));
List
基本ロジック1は、keyが500個の商品2、jedisに設定.watch(key);//keyに楽観ロック3,Transaction transaction=jedis.multi();//トランザクション・ブロックの開始をマークします.4,transaction.set(key, String.valueOf(prdNum - 1));//value 5、List result=transactionを変更します.exec();//原子性実行事物result==null|result.isEmpty()はすべて失敗6、jedis.unwatch();//exec,discard,unwatchコマンドは、接続中のすべての監視7,ConnectionManagementをクリアします.closeConnection(jedis);//解放jedis接続これはすべて知っているはずです......
スレ主はすでに500個のスレッドでOKのをテストしたことがあります