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