Redis-事務總結

來源:互聯網
上載者:User
實現事務的方法 multi(開啟事務)+exec(提交)+discard(放棄事務)+watch(CAS樂觀鎖) lua指令碼 Redis事務的特點 事務中的所有方法串列執行,執行過程不會被其它client打斷; 事務是原子的,命令全執行,或全不執行,但是,Redis的原子性和關聯式資料庫的原子性不一致,Redis雖然能保證命令全執行,但是如果某條命令在執行時出錯,Redis會忽略它,繼續執行下一條命令。 事務中的錯誤處理 語法錯誤或系統錯誤:對於這種類型的錯誤,在client執行事務前就能發現(事務中命令成功提交會返回queued),多數client會選擇discard事務。從Redis2.6.5開始,服務端會記錄這樣的錯誤,在用戶端exec時報錯並自動丟棄該事務; 執行時報錯:服務端會忽略該條語句的錯誤,直接執行事務中的下一跳語句。也就是說,執行時錯誤沒有復原的操作,官方的說法是這樣有利於保持Redis簡單高效。 Jedis代碼示範
// multi實現事務private void doWithMulti(Jedis jedis) {        Transaction transaction = jedis.multi();        transaction.incr("num.trans");        transaction.set("val.trans", "inTrans");        transaction.sismember("wilson.friends", "tom");        System.out.println("Transaction result:"+transaction.exec());        jedis.del(new String[]{"num.trans","val.trans"});}// 樂觀鎖實現原子操作private void doWithMultiAndCAS(Jedis jedis) {    List<Object> res = null;    do {        jedis.watch("wilson.friends");        Boolean isFriend=jedis.sismember("wilson.friends", "katty");        if (!isFriend) {            Transaction transaction = jedis.multi();            // 各種商務邏輯            transaction.incr("num.trans");            transaction.set("val.trans", "inTrans");            res = transaction.exec();            System.out.println("Transaction result:"+res);        }    } while (null == res);}// pipeline+multi實現事務private void doWithPipeline(Jedis jedis) {    Pipeline line = jedis.pipelined();    line.multi();    line.incr("num.trans");    line.set("val.trans", "inTrans");    line.sadd("wilson.friends", "gary");    Response<String> numRes = line.get("num.trans");    line.exec();    line.sync();    System.out.println("num.trans val:"+numRes.get());}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.