Redis 事務(wù)
Redis 事務(wù)可以一次執(zhí)行多個命令, 并且?guī)в幸韵氯齻€重要的保證:
- 批量操作在發(fā)送 EXEC 命令前被放入隊列緩存。
- 收到 EXEC 命令后進入事務(wù)執(zhí)行,事務(wù)中任意命令執(zhí)行失敗,其余的命令依然被執(zhí)行。
- 在事務(wù)執(zhí)行過程,其他客戶端提交的命令請求不會插入到事務(wù)執(zhí)行命令序列中。
一個事務(wù)從開始到執(zhí)行會經(jīng)歷以下三個階段:
- 開始事務(wù)。
- 命令入隊。
- 執(zhí)行事務(wù)。
操作方法
方法名稱 | 參數(shù) | 說明 | 備注 |
---|---|---|---|
discard | 取消事務(wù)(回滾) | ||
exec | 執(zhí)行事務(wù)(獲取事務(wù)結(jié)果) | ||
multi | 開始事務(wù) | ||
unWatch | 取消 WATCH 命令對所有 key 的監(jiān)視 | ||
watch | $key, ...$keys | 監(jiān)視key |
開始事務(wù)之后,操作命令都將返回"QUEUED",直到取消事務(wù)或者執(zhí)行事務(wù),執(zhí)行exec之后,將返回所有命令結(jié)果
在集群中并不支持事務(wù).
基本使用
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);
});