1.redis事務命令: 命令作用返回值 watch 監視一個或多個key 總是OK multi 聲明事務開始,後續命令將排隊按順序等待exec執行 總是OK exec 順序執行multi之後的命令,如果multi之前使用watch命令監視的鍵的值發生變化,執行將失敗 執行成功時返回數組包含每個命令 ...
1.redis事務命令:
命令 | 作用 | 返回值 |
---|---|---|
watch | 監視一個或多個key | 總是OK |
multi | 聲明事務開始,後續命令將排隊按順序等待exec執行 | 總是OK |
exec | 順序執行multi之後的命令,如果multi之前使用watch命令監視的鍵的值發生變化,執行將失敗 | 執行成功時返回數組包含每個命令執行結果,失敗時原生命令返回null,php-redis擴展方法返回false |
discard | 取消事務 | 總是OK |
unwatch | 取消watch監視,如果watch監視之後執行了exec或discard,會自動取消監視,不必再unwatch | 總是OK |
2.redis事務示例:
<?php
try {
//連接本地的 Redis 服務
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
} catch (Exception $e){
echo $e->getMessage();
die;
}
$key1 = 'x1';
$key2 = 'x2';
$redis->set($key1, '123');
$redis->set($key2, '234');
try {
//監視一個(或多個)key,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷
$redis->watch(array($key1, $key2));
//模擬監視 key 被打斷
//$redis->set($key1, '12345');
$redis->multi();
$redis->set($key1, '1123');
$redis->set($key2, '2123');
//執行事務塊內的所有命令
$status = $redis->exec();
//失敗則取消事務
if (!$status) {
$redis->discard();
}
} catch (Exception $e){
echo $e->getMessage();
die;
}
var_dump($status);
echo '<br>';
echo $redis->get($key1) . '-' .$redis->get($key2);