仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 478|回复: 6
打印 上一主题 下一主题

[学习教程] PHP网站制作之PHP memcache完成动静行列实例

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:12:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
看看西,人家这个编论坛,那个CMS,还有那啥CRM,我啥时候写一个呢?如今memcache在服务器缓存使用对照普遍,上面我来先容memcache完成动静行列守候的一个例子,有必要懂得的伴侣可参考。memche动静行列的道理就是在key上做文章,用以做一个一连的数字加上前缀纪录序列化今后动静大概日记。然后经由过程准时程序将内容落地到文件大概数据库。

php完成动静行列的用途好比在做发送邮件时发送大批邮件很费工夫的成绩,那末能够接纳行列。
便利完成行列的轻量级行列服务器是:
starling撑持memcache协定的轻量级耐久化服务器
https://github.com/starling/starling
Beanstalkd轻量、高效,撑持耐久化,每秒可处置3000摆布的行列
http://kr.github.com/beanstalkd/
php中也能够利用memcache/memcached来完成动静行列。
  1. [/code]
  2. 基于PHP共享内存完成的动静行列:
  3. [code]
复制代码


关于一个很年夜的动静行列,频仍举行举行年夜数据库的序列化和反序列化,有太泯灭。上面是我用PHP完成的一个动静行列,只必要在尾部拔出一个数据,就操纵尾部,不必操纵全部动静行列举行读取,与操纵。可是,这个动静行列不是线程平安的,我只是只管的制止了抵触的大概性。假如动静不长短常的麋集,好比几秒钟才一个,仍是能够思索如许利用的。
假如你要完成线程平安的,一个倡议是经由过程文件举行锁定,然落后行操纵。上面是代码:
代码以下:
  1. classMemcache_Queue{private$memcache;private$name;private$prefix;function__construct($maxSize,$name,$memcache,$prefix="__memcache_queue__"){if($memcache==null){thrownewException("memcacheobjectisnull,newtheobjectfirst.");}$this->memcache=$memcache;$this->name=$name;$this->prefix=$prefix;$this->maxSize=$maxSize;$this->front=0;$this->real=0;$this->size=0;}function__get($name){return$this->get($name);}function__set($name,$value){$this->add($name,$value);return$this;}functionisEmpty(){return$this->size==0;}functionisFull(){return$this->size==$this->maxSize;}functionenQueue($data){if($this->isFull()){thrownewException("QueueisFull");}$this->increment("size");$this->set($this->real,$data);$this->set("real",($this->real+1)%$this->maxSize);return$this;}functiondeQueue(){if($this->isEmpty()){thrownewException("QueueisEmpty");}$this->decrement("size");$this->delete($this->front);$this->set("front",($this->front+1)%$this->maxSize);return$this;}functiongetTop(){return$this->get($this->front);}functiongetAll(){return$this->getPage();}functiongetPage($offset=0,$limit=0){if($this->isEmpty()$this->size<$offset){returnnull;}$keys[]=$this->getKeyByPos(($this->front+$offset)%$this->maxSize);$num=1;for($pos=($this->front+$offset+1)%$this->maxSize;$pos!=$this->real;$pos=($pos+1)%$this->maxSize){$keys[]=$this->getKeyByPos($pos);$num++;if($limit>0&&$limit==$num){break;}}returnarray_values($this->memcache->get($keys));}functionmakeEmpty(){$keys=$this->getAllKeys();foreach($keysas$value){$this->delete($value);}$this->delete("real");$this->delete("front");$this->delete("size");$this->delete("maxSize");}privatefunctiongetAllKeys(){if($this->isEmpty()){returnarray();}$keys[]=$this->getKeyByPos($this->front);for($pos=($this->front+1)%$this->maxSize;$pos!=$this->real;$pos=($pos+1)%$this->maxSize){$keys[]=$this->getKeyByPos($pos);}return$keys;}privatefunctionadd($pos,$data){$this->memcache->add($this->getKeyByPos($pos),$data);return$this;}privatefunctionincrement($pos){return$this->memcache->increment($this->getKeyByPos($pos));}privatefunctiondecrement($pos){$this->memcache->decrement($this->getKeyByPos($pos));}privatefunctionset($pos,$data){$this->memcache->set($this->getKeyByPos($pos),$data);return$this;}privatefunctionget($pos){return$this->memcache->get($this->getKeyByPos($pos));}privatefunctiondelete($pos){return$this->memcache->delete($this->getKeyByPos($pos));}privatefunctiongetKeyByPos($pos){return$this->prefix.$this->name.$pos;}}
复制代码



另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。
再见西城 该用户已被删除
沙发
发表于 2015-2-5 00:57:50 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
admin 该用户已被删除
板凳
发表于 2015-2-11 01:13:39 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-3-1 19:23:22 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
变相怪杰 该用户已被删除
5#
发表于 2015-3-10 22:53:33 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
金色的骷髅 该用户已被删除
6#
发表于 2015-3-17 15:50:02 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
透明 该用户已被删除
7#
发表于 2015-3-24 10:33:41 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 00:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表