首頁 > 資料庫 > Redis > 主體

關於Redis事務和pipleline

藏色散人
發布: 2020-11-05 16:04:03
轉載
2558 人瀏覽過

以下由Redis教學專欄來介紹關於Redis事務和pipleline,希望對需要的朋友有幫助!

關於Redis事務和pipleline

1、reidis交易

#Redis 交易可以一次執行多個指令, 並且有以下三個重要的保證:

  • 批次操作在發送EXEC 指令前被放入佇列快取。
  • 收到 EXEC 指令後進入事務執行,事務中任意指令執行失敗,其餘的指令仍被執行。
  • 在交易執行過程,其他客戶端提交的命令請求不會插入到交易執行命令序列中。

一個交易從開始到執行會經歷以下三個階段:

  • 開始交易。
  • 命令入隊。
  • 執行交易。

 

MULTI 開始一個事務, 然後將多個指令入隊到事務中, 最後由 EXEC 指令觸發事務,一併執行事務中的所有指令:

1、交易執行

關於Redis事務和pipleline

2、watch

監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他指令所改動,那麼事務將被打斷。

 

關於Redis事務和pipleline關於Redis事務和pipleline

 

#3、discard

取消事務,放棄執行事務塊內的所有命令。

 

關於Redis事務和pipleline

2、jedis程式碼

1、設定支持事務

template.setEnableTransactionSupport(true);
登入後複製
<br>
登入後複製

2、程式碼:

<br>

#
 redisTemplate.opsForValue().set("aaa", 321);
redisTemplate.watch("aaa");
redisTemplate.multi();
redisTemplate.opsForValue().set("aaa", 123);
redisTemplate.opsForValue().set("bbb", 123);
redisTemplate.exec();
登入後複製

3、pipleline

#jedis 程式碼:

<br>

Map<string> map = new HashMap();
map.put("aaa", 111);
map.put("bbb", 222);
map.put("ccc", 3333);

List list = redisTemplate.executePipelined(new RedisCallback<object>() {
    @Override
    public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
        redisConnection.openPipeline();        for (Map.Entry<string> mapEntry : map.entrySet()) {
            redisConnection.set(redisTemplate.getKeySerializer().serialize(mapEntry.getKey()), redisTemplate.getValueSerializer().serialize(mapEntry.getValue()));
        }        return null;
    }
}, redisTemplate.getValueSerializer());

System.out.println(redisUtil.get("aaa"));
System.out.println(redisUtil.get("bbb"));
System.out.println(redisUtil.get("ccc"));</string></object></string>
登入後複製

以上是關於Redis事務和pipleline的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!