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);
});