Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
操作方法
方法名称 | 参数 | 说明 | 备注 |
---|---|---|---|
discard | 取消事务(回滚) | ||
exec | 执行事务(获取事务结果) | ||
multi | 开始事务 | ||
unWatch | 取消 WATCH 命令对所有 key 的监视 | ||
watch | $key, ...$keys | 监视key |
开始事务之后,操作命令都将返回"QUEUED",直到取消事务或者执行事务,执行exec之后,将返回所有命令结果
在集群中并不支持事务.
基本使用
go(function () {
$redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
'host' => '127.0.0.1',
'port' => '6379',
'auth' => 'easyswoole',
'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
]));
$data = $redis->multi();
var_dump($data);
$redis->del('ha');
$data = $redis->hset('ha', 'a', 1);
var_dump($data);
$data = $redis->hset('ha', 'b', '2');
var_dump($data);
$data = $redis->hset('ha', 'c', '3');
var_dump($data);
$data = $redis->hGetAll('ha');
var_dump($data);
$data = $redis->exec();
var_dump($data);
$redis->multi();
$data = $redis->discard();
var_dump($data);
$data = $redis->watch('a', 'b', 'c');
var_dump($data);
$data = $redis->unwatch();
var_dump($data);
});