乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
<?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 实现乐观锁机制 * * @example php optimistic-lock.php */ $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 监视 count 值 $redis->watch('count'); // 开启事务 $redis->multi(); // 操作count $time = time(); $redis->set('count', $time); //------------------------------- /** * 模拟并发下其他进程进行set count操作 请执行下面操作 * * redis-cli 执行 $redis->set('count', 'is simulate'); 模拟其他终端 */ sleep(10); //------------------------------- // 提交事务 $res = $redis->exec(); if ($res) { // 成功... echo 'success:' . $time; return; } // 失败... echo 'fail:' . $time;