Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

    操作方法

方法名称参数说明备注
discard取消事务(回滚)
exec执行事务(获取事务结果)
multi开始事务
unWatch取消 WATCH 命令对所有 key 的监视
watch$key, …$keys监视key

开始事务之后,操作命令都将返回”QUEUED”,直到取消事务或者执行事务,执行exec之后,将返回所有命令结果

在集群中并不支持事务.

基本使用

  1. go(function () {
  2. $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
  3. 'host' => '127.0.0.1',
  4. 'port' => '6379',
  5. 'auth' => 'easyswoole',
  6. 'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
  7. ]));
  8. $data = $redis->multi();
  9. var_dump($data);
  10. $redis->del('ha');
  11. $data = $redis->hset('ha', 'a', 1);
  12. var_dump($data);
  13. $data = $redis->hset('ha', 'b', '2');
  14. var_dump($data);
  15. $data = $redis->hset('ha', 'c', '3');
  16. var_dump($data);
  17. $data = $redis->hGetAll('ha');
  18. var_dump($data);
  19. $data = $redis->exec();
  20. var_dump($data);
  21. $redis->multi();
  22. $data = $redis->discard();
  23. var_dump($data);
  24. $data = $redis->watch('a', 'b', 'c');
  25. var_dump($data);
  26. $data = $redis->unwatch();
  27. var_dump($data);
  28. });