redis 在 php 中的應用(事務 [ Transaction ] 篇)


本文為我閱讀了 redis參考手冊 之后編寫,注意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法)

目錄:

Transaction(事務)
WATCH UNWATCH MULTI EXEC DISCARD

 

Transaction(事務)

1、WATCH

Redis Watch 命令用於監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷

語法:

redis 127.0.0.1:6379> Watch

返回值: 總是返回 OK 

可用版本:>= 2.2.0

時間復雜度:O(1)

具體實例:

$redis -> watch('number');

2、UNWATCH

Redis Unwatch 命令用於取消 WATCH 命令對所有 key 的監視

語法:

redis 127.0.0.1:6379> UNWATCH

返回值: 總是返回 OK 

可用版本:>= 2.2.0

時間復雜度:O(1)

具體實例:

$redis -> watch('number');
$redis -> unwatch();

3、MULTI

Redis Multi 命令用於標記一個事務塊的開始。

事務塊內的多條命令會按照先后順序被放進一個隊列當中,最后由 EXEC 命令原子性(atomic)地執行。

語法:

redis 127.0.0.1:6379> Multi

返回值: 總是返回 OK 

可用版本:>= 1.2.0

時間復雜度:O(1)

具體實例:

$redis -> multi();

4、EXEC

Redis Exec 命令用於執行所有事務塊內的命令

語法:

redis 127.0.0.1:6379> Exec

返回值: 事務塊內所有命令的返回值,按命令執行的先后順序排列。 當操作被打斷時,返回空值 nil 

可用版本:>= 1.2.0

時間復雜度:事務塊內所有命令的時間復雜度的總和

具體實例:

<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); $redis -> watch('number');$redis -> multi(); $redis -> set('favorite_fruit','cherry'); $redis -> incrBy('number',3); $redis -> get('favorite_fruit'); $redis -> ping(); var_dump($redis -> exec()); //array (size=4) // 0 => boolean true // 1 => int 3 // 2 => string 'cherry' (length=6) // 3 => string '+PONG' (length=5)

5、DISCARD

Redis Discard 命令用於取消事務放棄執行事務塊內的所有命令。

語法:

redis 127.0.0.1:6379> DISCARD

返回值: 總是返回 OK 。

可用版本:>= 2.0.0

時間復雜度:O(1)。

具體實例:

<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); $redis -> watch('number'); $redis -> unwatch(); $redis -> multi(); $redis -> set('favorite_fruit','cherry'); $redis -> incrBy('number',3); $redis -> get('favorite_fruit'); $redis -> ping(); $redis -> discard();            // 取消事務
var_dump($redis -> exec());     // null

 如有轉載,請注明出處:http://www.cnblogs.com/chrdai/p/6856619.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM