redis事物的使用

jopen 10年前

redis的几个事物命令:

WATCH 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断;
UNWATCH 取消 WATCH 命令对所有 key 的监视;
MULTI 标记一个事务块的开始,指事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由EXEC命令原子性(atomic)地执行;
DISCARD 取消事务,放弃执行事务块内的所有命令;
EXEC 执行所有事务块内的命令;

phpredis的实现方式:

事务的调用有两种模式Redis::MULTI和Redis::PIPELINE,默认是Redis::MULTI模式,Redis::PIPELINE管道模式速度更快,但没有任何保证原子性有可能造成数据的丢失。

代码示例:

<?php  $redis = new Redis();  $redis->connect('127.0.0.1', 6379);  $startTime = microtimeFloat();     $pipe = $redis->multi(Redis::PIPELINE);  for($i = 0; $i < 100000; $i++){      $pipe->set("key::$i", time());      $pipe->get("key::$i");  }  $pipe->exec();     //$redis->flushDB();  $endTime = microtimeFloat();  $runTime = $endTime - $startTime;  echo "用时 $runTime 秒";     function microtimeFloat(){      list($usec, $sec) = explode(" ", microtime());      return ((float)$usec + (float)$sec);  }  ?>