抽奖加锁 php,PHP抽奖活动加内存锁,原理是什么?

PHP抽奖活动加内存锁,原理是什么?如何实现?

public function acquire($key) {

//如果需要同时获取两个锁

if ( is_array($key) && count($key) == 2 ) {

while (TRUE) {

$res = array();

foreach($key as $k => $v) {

$res[$k] = $this->acquire($v);

if ( !$res[$k] ) {

break;

}

}

//若第一个锁未拿到则直接返回

if ( !$res[0] ) {

$err = new SysErr(System::MEMCACHE_ACQUIRE_LOCK_ERROR);

ErrorHandle::throwErr($err);

} elseif( !$res[1] ) {

//释放第一个锁,等待然后重试

$this->release($key[0]);

usleep(LockConfig::LOCK_TIMEWAIT);

} else {

return TRUE;

}

}

} else {

$lock_key = LockConfig::LOCK_PREFIX . $key;

$i = 0;

do {

$lock = $this->_memcache->add( $lock_key, 1, LockConfig::LOCK_TIMEOUT );

//如果第一次没有获取到锁则等待指定时间后重试

if ($i > 0) {

usleep(LockConfig::LOCK_TIMEWAIT);

}

$i++;

//超过重试次数后退出

if ($i > LockConfig::LOCK_RETRY_TIMES) {

$err = new SysErr(System::MEMCACHE_ACQUIRE_LOCK_ERROR);

ErrorHandle::throwErr($err);

}

} while( !$lock );

// 记录log

if ($i > 1) {

LogHelper::warning('lock.log', "Acquire lock '{$lock_key}' for {$i} times");

}

return $lock;

}

}

/**

* 释放内存锁

*

* @param string $key 内存锁去除前缀后的key值

* @return bool 释放成功返回TRUE

*/

public function release($key) {

$lock_key = LockConfig::LOCK_PREFIX . $key;

return $this->_memcache->delete($lock_key);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP微信抽奖系统源码是一个基于PHP语言开发的微信抽奖系统。它通过结合微信公众号开发技术和抽奖算法,实现了一个完整的抽奖功能。 源码包括三个主要部分:前端页面、后台管理和数据库。 前端页面是用户在微信公众号中进行抽奖的界面。用户可以点击抽奖按钮,系统会根据预设的规则和概率自动进行抽奖,并实时展示用户的抽奖结果。此外,前端页面还可以展示中奖名单、活动规则等信息。 后台管理是抽奖系统的管理界面,管理员可以通过该界面对抽奖规则、奖品设置、中奖名单进行管理。管理员还可以查看每个用户的抽奖记录,以及导出中奖名单等操作。 数据库是存储抽奖系统的数据的地方。它包括了用户信息、抽奖规则、奖品信息以及中奖名单等数据表。通过与源码结合,可以实现数据的增删改查等操作。 PHP微信抽奖系统源码具备以下特点:首先,采用PHP语言开发,具有良好的可扩展性和稳定性。其次,与微信公众号完美结合,用户可以直接在微信中参与抽奖活动。再次,系统支持多种抽奖规则和概率设置,可以根据实际需求进行灵活的配置。最后,系统具备后台管理功能,便于管理员对抽奖活动进行管理和监控。 总之,PHP微信抽奖系统源码是一个方便、实用的工具,通过简单的配置和部署,即可实现微信公众号中的抽奖功能,并且可以根据实际需求进行灵活的扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值