a.php代码如下:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $a = $redis->get('a'); $redis->watch('a'); sleep(10); $ret = $redis->multi()->incr('a')->exec(); var_dump($ret); var_dump($a);
b.php代码如下:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->set('a', '1'); $a = $redis->get('a'); var_dump($a);
c.php代码如下:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $a = $redis->get('a'); var_dump($a);
先执行a.php,结果如下:
此时a的值为2
再执行a.php,三秒后执行b.php(将a的值变为1),执行结果如下图:
再过七秒后,可以看到a.php的执行结果失败,如下图:
然后执行c.php查看最后结果,如下图:
通过redis的事务处理,可以实现广告点击数的控制,避免多个客户端同时自增点击数,造成点击数跑超。