- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PHP memcache实现消息队列实例
现在memcache在服务器缓存应用比较广泛,下面我来介绍memcache实现消息队列等待的一个例子,有需要了解的朋友可参考。
memche消息队列的原理就是在key上做文章,用以做一个连续的数字加上前缀记录序列化以后消息或者日志。然后通过定时程序将内容落地到文件或者数据库。
php实现消息队列的用处比如在做发送邮件时发送大量邮件很费时间的问题,那么可以采取队列。方便实现队列的轻量级队列服务器是:starling支持memcache协议的轻量级持久化服务器/starling/starlingBeanstalkd轻量、高效,支持持久化,每秒可处理3000左右的队列/beanstalkd/php中也可以使用memcache/memcached来实现消息队列。
?代码如下 复制代码 ?php/*** Memcache 消息队列类*/
class QMC {const PREFIX = ASDFASDFFWQKE;
/*** 初始化mc* @staticvar string $mc* @return Memcache*/static private function mc_init() {static $mc = null;if (is_null($mc)) {$mc = new Memcache;$mc-connect(, 11211);}return $mc;}/*** mc 计数器,增加计数并返回新的计数* @param string $key?? 计数器* @param int $offset?? 计数增量,可为负数.0为不改变计数* @param int $time???? 时间* @return int/false??? 失败是返回false,成功时返回更新计数器后的计数*/static public function set_counter( $key, $offset, $time=0 ){$mc = self::mc_init();$val = $mc-get($key);if( !is_numeric($val) || $val 0 ){$ret = $mc-set( $key, 0, $time );if( !$ret ) return false;$val = 0;}$offset = intval( $offset );if( $offset 0 ){return $mc-increment( $key, $offset );}elseif( $offset 0 ){return $mc-decrement( $key, -$offset );}return $val;}
/*** 写入队列* @param string $key* @param mixed $value* @return bool*/static public function input( $key, $value ){$mc = self::mc_init();$w_key = self::PREFIX.$key.W;$v_key = self::PREFIX.$key.self::set_counter($w_key, 1);return $mc-set( $v_key, $value );}/*** 读取队列里的数据* @param string $key* @param int $max? 最多读取条数* @return array*/static public function output( $key, $max=100 ){$out = array();$mc = self::mc_init();$r_key = self::PREFIX.$key.R;$w_key = self::PREFIX.$key.W;$r_p?? = self::set_counter( $r_key, 0 );//读指针$w_p?? = self::set_counter( $w_key, 0 );//写指针if( $r_p == 0 ) $r_p = 1;while( $w_p = $r_p ){if( --$max 0 ) break;$v_key = self::PREFIX.$key.$r_p;$r_p = self::set_counter( $r_key, 1 );$out[] = $mc-get( $v_key );$mc-delete($v_key);}return $out;}}/**使用方法:QMC::inpu
文档评论(0)