您的位置:首页 > 数据库 > Memcache

利用memcached实现并发时候,设置缓存锁

2015-11-09 00:00 465 查看
摘要: 利用memched:add()的原子性,来为并发请求加锁。

利用了memcached中 add()方法。
memcached:add($key) 成功时返回 TRUE, 或者在失败时返回 FALSE。 如果这个key已经存在返回FALSE。
利用add的原子性来判断是否需要执行业务代码。
/**
* @param null $key
*
* @author 20779182@qq.com
*/
public function add_cache($key=null)
{
$memcacheClass = new Memcached();
$data = $memcacheClass->get($key);
if(! $data) {
do {
$write_key = 'write';
if($memcacheClass->add($write_key, $write_key, 10 * 60)) {
// 加锁成功,执行业务操作
$data = $model->get();
$memcacheClass->set($key, $data, 30 * 60); // 将数据存入缓存
$memcacheClass->delete($write_key);
$is_retry = false;
} else {
// 如果加锁不成功,等待一段时间之后重试
sleep(10);
$is_retry = true;
}
} while($is_retry);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: