在 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 发生了变化,事务将失败。