当前位置: 首页 > redis, 分布式系统, 缓存系统 > 正文

Redis事务的使用

关键字:
1 星2 星3 星4 星5 星 (暂无评分)
Loading ... Loading ...
baidu_share

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

MULTI命令使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
redis> MULTI
OK
redis> INCR user_id
QUEUED
redis> INCR user_id
QUEUED
redis> INCR user_id
QUEUED
redis> PING
QUEUED
redis> EXEC
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG

phpredis也对该方法做了实现,事务的调用有两种模式Redis::MULTI和Redis::PIPELINE,默认是Redis::MULTI模式,Redis::PIPELINE管道模式速度更快,但没有任何保证原子性有可能造成数据的丢失。
Redis管道PHP测试示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
}
?>

本文固定链接: http://www.chepoo.com/redis-transaction-example.html | IT技术精华网

Redis事务的使用:等您坐沙发呢!

发表评论