redis的事务处理

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,结果如下:

wKioL1VMczWTbZcyAABPSXdTqaQ194.jpg

此时a的值为2

再执行a.php,三秒后执行b.php(将a的值变为1),执行结果如下图:

wKioL1VMc_uhNB5eAAA2zqoh17Q103.jpg

再过七秒后,可以看到a.php的执行结果失败,如下图:

wKioL1VMdDXzyIQkAABCfj1EnBg029.jpg

然后执行c.php查看最后结果,如下图:

wKiom1VMc3LRzTb8AAAzB2IHXT4518.jpg


通过redis的事务处理,可以实现广告点击数的控制,避免多个客户端同时自增点击数,造成点击数跑超。

你可能感兴趣的:(PHP,广告点击控制)