以下由Redis教學專欄來介紹關於Redis事務和pipleline,希望對需要的朋友有幫助!
#Redis 交易可以一次執行多個指令, 並且有以下三個重要的保證:
- 批次操作在發送EXEC 指令前被放入佇列快取。
- 收到 EXEC 指令後進入事務執行,事務中任意指令執行失敗,其餘的指令仍被執行。
- 在交易執行過程,其他客戶端提交的命令請求不會插入到交易執行命令序列中。
一個交易從開始到執行會經歷以下三個階段:
- 開始交易。
- 命令入隊。
- 執行交易。
MULTI 開始一個事務, 然後將多個指令入隊到事務中, 最後由 EXEC 指令觸發事務,一併執行事務中的所有指令:
1、交易執行
2、watch
監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他指令所改動,那麼事務將被打斷。
#3、discard
取消事務,放棄執行事務塊內的所有命令。
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();登入後複製
#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中文網其他相關文章!