Memcached是一种缓存技术,可以将数据放入内存中,从而加快内存访问速度。memcached中维护着一个很大的hashtable表。目前获取数据的方式有3种。查询数据库使用truestatic(file)直接从内存中获取memcached服务维护一张内存表(hashtable)keyvaluekey一般为字符串,不能重复value可以是(string,value,array,object,Boolean,binarydata,null)(其实就是一个序列化的字符串)installation从命令行下载memcached.exe,启动memcached.exe-dinstall启动服务。启动命令行memcached.exe-dstart,使用netstat-an可以看到1121端口正在监听,说明memcached.exe启动成功。0-65535)用2个字节表示,一般用在1024之前(知名端口))stopmemcached.exe-dstopnetstat-anb,可以看到哪个程序在监听那个端口(也可以看到是哪个IP在连接)安装失败的原因是没有权限。安装路径有中文空格等特殊字符。操作memcachedphp程序memcache扩展操作memcached扩展操作直接使用socket(socket)编程操作telnet工具telnet连接(crud)登录telnet并连接memcached服务telnet127.0.0.111211addaddkey(name)0(压缩或不压缩)30(存储时间秒)5(数据大小)addkey10305getgetkeymodifysetkey0305(key不存在则添加,存在则修改)replacekey0305deletedeletekeyappendkey0305appendprependkey0305appendflush_allbeforedeletealldatastats查看memcachedusagephpmemcacheextensionoperationinstallextension,modifyconfigurationfilespecificcaseconnectt('127.0.0.1','11211')ordie('连接错误');//添加*********************//添加字符String$mem->add('name','xiaobai','0','60')或die('添加str错误');//获取字符串$res=$mem->get('name');回声$res;//添加数组$arr=array(1,2,3,4);$mem->add('list',$arr,'0','60')ordie('添加数组错误');//获取数组$res=$mem->get('list');echo'
';变量转储($res);//添加对象类Cat{public$name;公共$年龄;公共函数__construct($name,$age=1){$this->name=$name;$this->age=$age;}}$cat=newCat('小白');$mem->add('cat',$cat,0,60)ordie('addobjerror');//获取对象$res=$mem->get('cat');变量转储($res);//添加布尔值$mem->add('bool',false,0,60)ordie('addboolerror');//获取布尔值$res=$mem->get('bool');变量转储($res);//修改****************************************$mem->replace('name','小黑',0,60)ordie('u更新str错误');$res=$mem->get('名字');变量转储($res);//删除**********************************$mem->delete('name')ordie('删除字符串错误');//$mem->get('name')ordie('nameisnotfund');//设置保存超过30天的方法$mem->add('name','小子',0,strtotime('+31天'))ordie('31天过期错误');$res=$mem->get('name')ordie('nameisnotfundinexpire');变量转储($res);//关闭连接$mem->close();?>PHP源码操作memcached服务(无memcache扩展)网上找源码,复制粘贴,使用memcached机制了解c/s架构基于libevent事件处理,使用libevent机制处理并发(mysql是多线程的,apacheismpm)libevent是一个跨平台事件处理接口的封装内存存储方式(内容达到最大值后,使用LRU算法删除长时间未访问的数据)基于客户端分布式分布式存储+valueaddServer('127.0.0.1',11210)ordie('connect1error');$mem->addServer('127.0.0.1',11211)ordie('connect2error');//通过自己的算法(hash值算法)将name随机放入memcache$mem->set('name1','hello1',0,300)ordie('addstrerror');$mem->set('name2','hello2',0,300)ordie('addstrerror');$mem->set('name3','hello3',0,300)ordie('addstrerror');?>addServer('127.0.0.1',11210)ordie('connect1error');$mem->addServer('127.0.0.1',11211)ordie('connect2error');echo$mem->get('name1');echo$mem->get('name2');echo$mem->get('name3');?>注意memcached服务的数据不是同步的,数据是分布式存储的。什么数据放入哪个memcached是由客户端的memcache对象决定的。执行addServer时,并没有立即连接memcached服务,而是通过hash计算确定memcached服务器。因此,当大量Join服务器连接池时,没有额外的开销。生命周期从放入memcache的数据开始计算。时间一到,它就会被销毁。时间为0,表示未过期重启memcached服务。手动删除delete/flush_allsession,放入memcache。修改php.inisession.save_handler=[user|files|memcache]用户自定义session.save_path='tcp://127.0.0.1:11211,tcp://127.0.0.1:11210'以逗号分隔,以sessionID存入memcacheaskey比较memcached和sessionmemcached的主要目的是提速,所以它是一种无状态数据,即数据不绑定用户。该会话适用于用户绑定。它是有状态的数据。memcachedsecurity在win下启用防火墙(只允许本地或内网访问),linux下也可以启动防火墙iptables-ainput-ptcp-s127.0.0.1-dport11211-jACCEPT适用于memcache数据变化频繁,数据不稳定,不需要实时保存(在线状态、在线人数)