Redis學習筆記(7)-事務

來源:互聯網
上載者:User

標籤:

package cn.com;import java.util.List;import redis.clients.jedis.Jedis;import redis.clients.jedis.Transaction;public class Redis_Transactions {public static Jedis redis = new Jedis("localhost", 6379);// 串連redis/** * 基本事務用法 * 預設給user1,user2都初始化為1000 * 開啟事務 * 給user:1:money 加一 * 給user:2:money 減一 * 執行事務 * */public static void base_trans() throws InterruptedException{redis.flushDB();//清除資料redis.set("money", "1000");redis.set("money1", "1000");    long start = System.currentTimeMillis();        Transaction tx = redis.multi();     tx.incr("money");//給使用者user:1 加一塊錢    tx.decr("money1");//給使用者user:1 減一塊錢    List<Object> results = tx.exec();     long end = System.currentTimeMillis();     System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds");        System.out.println(redis.get("money"));    System.out.println(redis.get("money1"));    redis.disconnect(); }/** * 使用者事務 * 預設給user1,user2都初始化為1000 * 開啟事務 * 給user:1:money 加一 * 給user:2:money 減一 * 我們user:2:money 的值是a 是無法執行減1 的操作 那是否還是照樣執行 * 因為redis事務是比較簡單的,像下面這種問題需要開發人員自己控制,redis 事務是不做控制的 * */public static void user_trans() throws InterruptedException{redis.flushDB();//清除資料redis.set("user:1:money", "1000");redis.set("user:2:money", "a");    long start = System.currentTimeMillis();     Transaction tx = redis.multi();          tx.incr("user:1:money");//給使用者user:1 加一塊錢    tx.decr("user:2:money");//給使用者user:1 減一塊錢       List<Object> results = tx.exec();     long end = System.currentTimeMillis();     System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds");         System.out.println(redis.get("user:1:money"));    System.out.println(redis.get("user:2:money"));    redis.disconnect(); }/** * 執行事務的過程其他用戶端改變了其中的key值,解決資料一致性問題 * 通過watch 對key的監控來實現其他用戶端修改資料後,事務取消 * 用法 首先用watch 開始對key的監控 在開啟事務,順序一定要先監控在執行事務 * */public static void changedata_trans() throws InterruptedException{redis.flushDB();//清除資料redis.set("user:1:money", "1000");redis.set("user:2:money", "1000");    long start = System.currentTimeMillis();     redis.watch("user:1:money");    Transaction tx = redis.multi();     tx.incr("user:1:money");//給使用者user:1 加一塊錢    tx.decr("user:2:money");//給使用者user:1 減一塊錢    changedata();//改變資料的方法    List<Object> results = tx.exec();        long end = System.currentTimeMillis();     System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds");         System.out.println(redis.get("user:1:money"));    System.out.println(redis.get("user:2:money"));    redis.disconnect(); }/** * 類比新開用戶端對事務中監控的key對應的元素進行修改 *  * **/public static void changedata(){  Jedis redis2 = new Jedis("localhost", 6379);// 串連redis  redis2.set("user:1:money", "8888");}  public static void main(String [] args) throws InterruptedException{changedata_trans(); }}

  

Redis學習筆記(7)-事務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.