在 PHP 中,使用 Redis 事務可以通過 MULTI
、EXEC
、WATCH
和 UNWATCH
命令來實現。下面是一個簡單的示例:
<?php
// 創建 Redis 實例
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 開始 Redis 事務
$redis->multi();
try {
// 執行 Redis 命令
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
// 提交 Redis 事務
$result = $redis->exec();
// 檢查事務是否成功執行
if ($result === false) {
echo "Redis transaction failed.";
} else {
echo "Redis transaction succeeded.";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
// 如果需要監視某個 key,在事務開始前使用 WATCH 命令
$redis->watch('key1');
try {
// 再次執行 Redis 事務
$redis->multi();
$redis->set('key1', 'new_value1');
$redis->set('key2', 'new_value2');
$redis->set('key3', 'new_value3');
$result = $redis->exec();
if ($result === false) {
// 如果被監視的 key 在事務執行期間發生了變化,事務將失敗
echo "Redis transaction failed due to change in watched key.";
} else {
echo "Redis transaction succeeded.";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
} finally {
// 無論成功還是失敗,都要取消監視
$redis->unwatch();
}
?>
在這個示例中,我們首先創建了一個 Redis 實例并連接到本地 Redis 服務器。然后我們使用 multi()
方法開始一個 Redis 事務,并在事務中執行一系列 Redis 命令。接下來,我們使用 exec()
方法提交事務。如果事務成功執行,exec()
將返回 true
,否則返回 false
。
我們還演示了如何使用 WATCH
和 UNWATCH
命令來監視特定的 key。如果在事務執行期間被監視的 key 發生了變化,事務將失敗。