memcached安装失败 连接 失败,是什么原因,有什么解决办法

由于开启SELinux导致memcached能启动但无法用php连接的问题 - 技术生活 - ITeye技术网站
博客分类:
今天给我的博客托管网站搬家,搬到国外的一个VPS提供商处,系统为CentOS 5.2,在配置memcached的时候,出问题了,具体的表现是
刚开始编译、安装memcached并运行,和wordpress mu能够很好的进行配合,通过监控的php程序能够连接并显示memcached运行状态。编译的选项为
./configure --enable-64bit --enable-threads
但是由于什么原因,系统资源被耗尽了,于是系统被我暴力关闭并重新启动了。
系统被暴力重新启动后,memcached无法正常工作,具体表现为监控memcached的php程序无法连接到memcached,使用memcached主页标准的测试程序也显示无法连接。
但是可以通过 telnet localhost 11211或者telnet 127.0.0.1 11211来连接到memcached的服务器,并且可以使用version和stats命令获得memcached的状态,但是得到的结果是get set, hits, misses全部为0。
查阅了很多网上的文章,绝大部分的都是连接被拒绝,memcached无法启动这类错误,与我的表现均不相同,没办法,只能摸着石头解决问题了,做了如下尝试均无果(无果指memcached主页提供的php测试程序无法连接到memcached服务器)
考虑到可能是暴力关闭系统损坏了文件系统,尝试重新编译libenv和memcached并重新安装,重新启动,无效。
考虑到可能刚刚release的版本引入新的bug,故卸载了最新的memcached 1.2.8并编译安装1.2.7,重新启动,无效。
考虑到可能是因为防火墙禁止了11211端口,于是运行system-config-securitylevel-tui 程序,将11211端口的tcp连接启用,重新应用防火墙规则,重新启动,无效。
使用& netstat -ntlp | grep memcached 结果如下,在memcached的启动脚本中增加了 -l 127.0.0.1 的选项,重新启动,无效。
tcp&&&&&&& 0&&&&& 0 0.0.0.0:11211&&&&&&&&&&& 0.0.0.0:*&&&&&&&&&&&&&&& LISTEN&&&&& 4959/memcached&&&&
tcp&&&&&&& 0&&&&& 0 :::11211&&&&&&&&&&&&&&&&&&& :::*&&&&&&&&&&&&&&&&&&&&&&& LISTEN&&&&& 4959/memcached&&&
百思不得其解,最后想到会不会是因为开启了SELinux
,导致无法建立TCP连接呢,于是通过system-config-securitylevel-tui关闭了SELinux,重启,居然可以了!
监控其运行的程序为memcache.php,来自http://livebookmark.net/journal/
启动和停止脚本来自 http://idcnews.net/html/edu/253.html
浏览: 40716 次
来自: 北京
有什么意义?
呵呵我们公司一个月之前刚刚开始基于ofbiz进行开发,这是第一 ...当前位置:
→ 爱思助手无法连接手机怎么办 爱思助手连接失败问题解决办法
本类常用软件
下载量:370407
下载量:234476
下载量:227119
下载量:216587
下载量:214063
爱思助手无法连接手机怎么办 爱思助手连接失败问题解决办法
8:49:21&&出处:&&&人气:1次&&&&字号:&&&&
类别: 手机工具 &&&大小:45.5M
&&&语言: 中文
首先请确认:a、数据线和电脑USB接口正常状态b、电脑端有安装最新版本iTunes1、请确认您的设备是苹果的设备,而不是山寨或者是假的,如果是假的可能会导致USB连接不稳定,会出现突然断开的现象。(连接电脑后在我的电脑内出现可移动磁盘的、手机提示要选择摄像头的等等均为假货或者山寨货)&2、请确认您的设备连接电脑后,手机在充电(确保数据线良好),并且我的电脑里有iPhone特征识别“XXX的iPhone数字照相机(XP)”或者“Apple iPhone(Win 7)”(如下图)3、请确认我的电脑设备管理器下没有打感叹号的驱动!XP用户:请右键点击【我的电脑】―管理―设备管理器―通用串行总线控制器―Apple Mobile Device USB Driver,有没有叹号,如果有,请右键更新驱动。Windows 7:用户请右键点击【我的电脑】―属性―设备管理器―通用串行总线控制器―Apple Mobile Device USB Driver,有没有叹号,如果有,请右键更新驱动4、之后确认一下我们的电脑是否有安装好iTunes,如果没有安装iTunes需要先下载最新版本的iTunes安装,安装后,连接设备后会有电脑会安装驱动。如果是电脑的iTunes驱动启动失败,首先点击“我的电脑”右键,选择“管理”,弹出的界面选择“服务和应用程序”,点击“服务”查看是否有安装“Apple Mobile Device”,这是苹果的驱动,链接不上手机有可能就是因为被杀毒软件误报了,看看常规项目中的“服务状态”是否已启动。如果没有,就点击“启动”。如果有,请停用,再重新启用,之后重启一下电脑,然后连接iPhone/iPad到电脑试试。如果电脑已经有安装好iTunes,爱思助手依旧无法连接,先确认手机是否有屏幕锁,如果有请解除屏幕锁,插拔手机并且在手机上点信任。也有时候可能是iTunes的驱动不完整或者被误删,需要完整卸载一次iTunes后再重新安装iTunes后试试。删除方法:点击iTunes安装包,选择删除再点下一步,即可完全卸载iTunes,然后再点击iTunes安装包安装就可以了。最后再打开爱思助手就可以连接到设备。如果以上的方法都无法连接,有可能是数据线或者电脑USB接口的原因,可以尝试换数据线连接或者USB接口连接。好了,爱思助手无法连接手机或是连接失败问题解决办法小编就为大家介绍到这里了,不知能否帮到你呢?
东坡下载 & 分享互联网
Copyright(C)
All Rights Reserved! 网站备案/许可证号:鄂ICP备号-1& 利用Memcache解决数据库高并发访问的瓶颈问题
利用Memcache解决数据库高并发访问的瓶颈问题
  对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题。特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰值已经达到500的时候,那你的程序运行离崩溃的边缘也不远了。很多小网站的开发人员一开始都将注意力放在了产品需求设计上,缺忽视了程序整体性能,可扩展性等方面的考虑,结果眼看着访问量一天天网上爬,可突然发现有一天网站因为访问量过大而崩溃了,到时候哭都来不及。所以我们一定要未雨绸缪,在数据库还没罢工前,想方设法给它减负,这也是这篇文章的主要议题。  大家都知道,当有一个request过来后,web服务器交给app服务器,app处理并从db中存取相关数据,但db存取的花费是相当高昂的。特别是每次都取相同的数据,等于是让数据库每次都在做高耗费的无用功,数据库如果会说话,肯定会发牢骚,你都问了这么多遍了,难道还记不住吗?是啊,如果app拿到第一次数据并存到内存里,下次读取时直接从内存里读取,而不用麻烦数据库,这样不就给数据库减负了?而且从内存取数据必然要比从数据库媒介取快很多倍,反而提升了应用程序的性能。  因此,我们可以在web/app层与db层之间加一层cache层,主要目的:1.减少数据库读取负担;2.提高数据读取速度。而且,cache存取的媒介是内存,而一台服务器的内存容量一般都是有限制的,不像硬盘容量可以做到TB级别。所以,可以考虑采用分布式的cache层,这样更易于破除内存容量的限制,同时又增加了灵活性。  Memcached介绍  Memcached是开源的分布式cache系统,现在很多的大型web应用程序包括,youtube,wikipedia,等等都在使用memcached来支持他们每天数亿级的页面访问。通过把cache层与他们的web架构集成,他们的应用程序在提高了性能的同时,还大大降低了数据库的负载。  具体的memcached资料大家可以直接从它的官方网站上得到。这里我就简单给大家介绍一下memcached的工作原理:  Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,便于查找、对比以及做到尽可能的散列。同时,memcached用的是一个二级散列,通过一张大hash表来维护。  Memcached有两个核心组件组成:服务端(ms)和客户端(mc),在一个memcached的查询中,mc先通过计算key的hash值来确定kv对所处在的ms位置。当ms确定后,客户端就会发送一个查询请求给对应的ms,让它来查找确切的数据。因为这之间没有交互以及多播协议,所以memcached交互带给网络的影响是最小化的。  举例说明:考虑以下这个场景,有三个mc分别是X,Y,Z,还有三个ms分别是A,B,C:  设置kv对  X想设置key=&foo&,value=&seattle&  X拿到ms列表,并对key做hash转化,根据hash值确定kv对所存的ms位置  B被选中了  X连接上B,B收到请求,把(key=&foo&,value=&seattle&)存了起来  获取kv对  Z想得到key=&foo&的value  Z用相同的hash算法算出hash值,并确定key=&foo&的值存在B上  Z连接上B,并从B那边得到value=&seattle&  其他任何从X,Y,Z的想得到key=&foo&的值的请求都会发向B  Memcached服务器(ms)  内存分配  默认情况下,ms是用一个内置的叫&块分配器&的组件来分配内存的。舍弃标准的malloc/free的内存分配,而采用块分配器的主要目的是为了避免内存碎片,否则操作系统要花费更多时间来查找这些逻辑上连续的内存块(实际上是断开的)。用了块分配器,ms会轮流的对内存进行大块的分配,并不断重用。当然由于块的大小各不相同,当数据大小和块大小不太相符的情况下,还是有可能导致内存的浪费。  同时,ms对key和data都有相应的限制,key的长度不能超过250字节,data也不能超过块大小的限制---1MB。  因为mc所使用的hash算法,并不会考虑到每个ms的内存大小。理论上mc会分配概率上等量的kv对给每个ms,这样如果每个ms的内存都不太一样,那可能会导致内存使用率的降低。所以一种替代的解决方案是,根据每个ms的内存大小,找出他们的最大公约数,然后在每个ms上开n个容量=最大公约数的instance,这样就等于拥有了多个容量大小一样的子ms,从而提供整体的内存使用率。  缓存策略  当ms的hash表满了之后,新的插入数据会替代老的数据,更新的策略是LRU(最近最少使用),以及每个kv对的有效时限。Kv对存储有效时限是在mc端由app设置并作为参数传给ms的。  同时ms采用是偷懒替代法,ms不会开额外的进程来实时监测过时的kv对并删除,而是当且仅当,新来一个插入的数据,而此时又没有多余的空间放了,才会进行清除动作。  缓存数据库查询  现在memcached最流行的一种使用方式是缓存数据库查询,下面举一个简单例子说明:  App需要得到userid=xxx的用户信息,对应的查询语句类似:  &SELECT*FROMusersWHEREuserid=xxx&  App先去问cache,有没有&user:userid&(key定义可预先定义约束好)的数据,如果有,返回数据;如果没有,App会从数据库中读取数据,并调用cache的add函数,把数据加入cache中。  当取的数据需要更新,app会调用cache的update函数,来保持数据库与cache的数据同步。  从上面的例子我们也可以发现,一旦数据库的数据发现变化,我们一定要及时更新cache中的数据,来保证app读到的是同步的正确数据。当然我们可以通过定时器方式记录下cache中数据的失效时间,时间一过就会激发事件对cache进行更新,但这之间总会有时间上的延迟,导致app可能从cache读到脏数据,这也被称为狗洞问题。(以后我会专门描述研究这个问题)  数据冗余与故障预防  从设计角度上,memcached是没有数据冗余环节的,它本身就是一个大规模的高性能cache层,加入数据冗余所能带来的只有设计的复杂性和提高系统的开支。  当一个ms上丢失了数据之后,app还是可以从数据库中取得数据。不过更谨慎的做法是在某些ms不能正常工作时,提供额外的ms来支持cache,这样就不会因为app从cache中取不到数据而一下子给数据库带来过大的负载。  同时为了减少某台ms故障所带来的影响,可以使用&热备份&方案,就是用一台新的ms来取代有问题的ms,当然新的ms还是要用原来ms的IP地址,大不了数据重新装载一遍。  另外一种方式,就是提高你ms的节点数,然后mc会实时侦查每个节点的状态,如果发现某个节点长时间没有响应,就会从mc的可用server列表里删除,并对server节点进行重新hash定位。当然这样也会造成的问题是,原本key存储在B上,变成存储在C上了。所以此方案本身也有其弱点,最好能和&热备份&方案结合使用,就可以使故障造成的影响最小化。  Memcached客户端(mc)  Memcached客户端有各种语言的版本供大家使用,包括java,c,php,.net等等。  大家可以根据自己项目的需要,选择合适的客户端来集成。& & & &缓存式的Web应用程序架构  有了缓存的支持,我们可以在传统的app层和db层之间加入cache层,每个app服务器都可以绑定一个mc,每次数据的读取都可以从ms中取得,如果没有,再从db层读取。而当数据要进行更新时,除了要发送update的sql给db层,同时也要将更新的数据发给mc,让mc去更新ms中的数据。  假设今后我们的数据库可以和ms进行通讯了,那可以将更新的任务统一交给db层,每次数据库更新数据的同时会自动去更新ms中的数据,这样就可以进一步减少app层的逻辑复杂度。如下图:  不过每次我们如果没有从cache读到数据,都不得不麻烦数据库。为了最小化数据库的负载压力,我们可以部署数据库复写,用slave数据库来完成读取操作,而master数据库永远只负责三件事:1.更新数据;2.同步slave数据库;3.更新cache。如下图:  以上这些缓存式web架构在实际应用中被证明是能有效并能极大地降低数据库的负载同时又能提高web的运行性能。当然这些架构还可以根据具体的应用环境进行变种,以达到不同硬件条件下性能的最优化。  未来的憧憬  Memcached的出现可以说是革命性的,第一次让我们意识到可以用内存作为存储媒介来大规模的缓存数据以提高程序的性能。不过它毕竟还是比较新的东西,还需要很多有待优化和改进的地方,例如:  如何利用memcached实现cache数据库,让数据库跑在内存上。这方面,tangentsoftware开发的memcached_engine已经做了不少工作,不过现在的版本还只是处于实验室阶段。  如何能方便有效的进行批量key清理。因为现在key是散列在不同的server上的,所以对某类key进行大批量清理是很麻烦的。因为memcached本身是一个大hash表,是不具备key的检索功能的。所以memcached是压根不知道某一类的key到底存了多少个,都存在哪些server上。而这类功能在实际应用中却是经常用到。
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 21:46:49)&&( 21:50:42)
纯技术文啊,看不懂。
学习下。。
好深奥哦,不懂···
牛文章。。。。
支持下博主 谢谢博主分享
这篇文章比较实用呢 博主辛苦了~
给力支持!
文章不错哈!给力支持!
赞一个 加油啊
完全随机文章2281人阅读
Memcached一些特性和限制
o在 Memcached中可以保存的item数据量是没有限制的,只有内存足够
o Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多个Memcached进程
o最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA
60*60*24*30控制
o最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250控制
o单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制,
它是默认的slab大小
o最大同时连接数是200,通过 conn_init()中的freetotal进行控制,最大软连接数是1024,通过
settings.maxconns=1024 进行控制
o跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响slab的数据占用和步进方式
memcached是一种无阻塞的socket通信方式服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快。
memcached分服务器端和客户端,可以配置多个服务器端和客户端,应用于分布式的服务非常广泛。
memcached作为小规模的数据分布式平台是十分有效果的。
memcached是键值一一对应,key默认最大不能超过128个字 节,value默认大小是1M,也就是一个slabs,如果要存2M的值(连续的),不能用两个slabs,因为两个slabs不是连续的,无法在内存中 存储,故需要修改slabs的大小,多个key和value进行存储时,即使这个slabs没有利用完,那么也不会存放别的数据。
目前memcached支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL和Protocol等语言客户端。
memcached本身的服务是用C语言编写的,启动非常简单:
memcached -d -m 2048 -l 10.0.0.40 -p 11211
-d表示memcached启动作为一个守护进程;
-m表示启用多大的内存支持,这里的单位是兆(M),2048表示2个G的内存
-l表示服务的IP地址,最好不要写成localhost
-p表示服务的端口,默认为11211
结束会话不需要发送任何命令。当不再需memcached服务时,要客户端可以在任何时候关闭连接。需要注意的是,鼓励客户端缓存这些连接,而不是 每次需要存取数据时都重新打开连接。这是因为memcached 被特意设计成及时开启很多连接也能够高效的工作(数百个,上千个如果需要的话)。缓存这些连接,可以消除建立连接所带来的开销(/*/相对而言,在服务器 端建立一个新连接的准备工作所带来的开销,可以忽略不计。)。
在memcache协议中发送的数据分两种:文本行 和 自由数据。文本行被用于来自客户端的命令和服务器的回应。自由数据用于客户端从服务器端存取数据时。同样服务器会以字节流的方式传回自由数据。/*/服务 器不用关心自由数据的字节顺序。自由数据的特征没有任何限制;但是通过前文提到的文本行,这项数据的接受者(服务器或客户端),便能够精确地获知所发送的 数据库的长度。
文本行固定以“rn”(回车符紧跟一个换行符)结束。 自由数据也是同样会以“rn”结束,但是 r(回车符)、n(换行符),以及任何其他8位字符,均可出现在数据中。因此,当客户端从服务器取回数据时,必须使用数据区块的长度来确定数据区块的结束 位置,而不要依据数据区块末尾的“rn”,即使它们固定存在于此。
键值
存储在memcached中的数据通过键值来标识。键值是一个文本字符串,对于需要存取这项数据的客户端而言,它必须是唯一的。键值当前的长度限制设定为250字符(当然,客户端通常不会用到这么长的键);键值中不能使用制表符和其他空白字符(例如空格,换行等)。
所有命令分为3种类型:
存储命令(有3项:’set’、’add’、’repalce’)指示服务器储存一些由键值标识的数据。客户端发送一行命令,后面跟着数据区块;然后,客户端等待接收服务器回传的命令行,指示成功与否。
取回命令(只有一项:’get’)指示服务器返回与所给键值相符合的数据(一个请求中右一个或多个键值)。客户端发送一行命令,包括所有请求的键值;服务 器每找到一项内容,都会发送回客户端一行关于这项内容的信息,紧跟着是对应的数据区块;直到服务器以一行“END”回应命令结束。
/*?*/其他的命令都不能携带自由数据。在这些命令中,客户端发送一行命令,然后等待(由命令所决定)一行回应,或最终以一行“END”结束的多行命令。
一行命令固定以命令名称开始,接着是以空格隔开的参数(如果有参数的话)。命令名称大小写敏感,并且必须小写。一些客户端发送给服务器的命令会包含 一些时限(针对内容或客户端请求的操作)。这时,时限的具体内容既可以是Unix时间戳(从日开始的秒钟数),或当前时间开始的秒钟数。 对后者而言,不能超过 60*60*24*30(30天);如果超出,服务器将会理解为Unix时间戳,而不是从当前时间起的秒偏移。
每一个由客户端发送的命令,都可能收到来自服务器的错误字串回复。这些错误字串会以三种形式出现:
- “ERRORrn”
意味着客户端发送了不存在的命令名称。
- “CLIENT_ERROR rn”
意味着输入的命令行里存在一些客户端错误,例如输入未遵循协议。部分是人类易于理解的错误解说……
- “SERVER_ERROR rn”
意味着一些服务器错误,导致命令无法执行。部分是人类易于理解的错误解说。在一些严重的情形下(通常应该不会遇到),服务器将在发送这行错误后关闭连接。这是服务器主动关闭连接的唯一情况。
在后面每项命令的描述中,这些错误行不会再特别提到,但是客户端必须考虑到这些它们存在的可能性。
<command name> <key> <flags> <exptime> <bytes>rn
- <command name> 是 set, add, 或者 repalce
set 意思是 “储存此数据”add 意思是 “储存此数据,只在服务器*未*保留此键值的数据时”replace意思是 “储存此数据,只在服务器*曾*保留此键值的数据时”
- <key> 是接下来的客户端所要求储存的数据的键值
- <flags> 是在取回内容时,与数据和发送块一同保存服务器上的任意16位无符号整形(用十进制来书写)。客户端可以用它作为“位域”来存储一些特定的信息;它对服务器是不透明的。
- <exptime> 是终止时间。如果为0,该项永不过期(虽然它可能被删除,以便为其他缓存项目腾出位置)。如果非0(Unix时间戳或当前时刻的秒偏移),到达终止时间后,客户端无法再获得这项内容。
- <bytes> 是随后的数据区块的字节长度,不包括用于分野的“rn”。它可以是0(这时后面跟随一个空的数据区块)。
发送命令行和数据区块以后,客户端等待回复,可能的回复如下:
- “STOREDrn”
- “NOT_STOREDrn”
表明数据没有被存储,但不是因为发生错误。这通常意味着add 或 replace命令的条件不成立,或者,项目已经位列删除队列(参考后文的“delete”命令)。
get <key>*rn
- <key>* 表示一个或多个键值,由空格隔开的字串
这行命令以后,客户端的等待0个或多个项目,每项都会收到一行文本,然后跟着数据区块。所有项目传送完毕后,服务器发送以下字串:
来指示回应完毕。
服务器用以下形式发送每项内容:
- 是所发送的键名
- 是存储命令所设置的记号
- 是随后数据块的长度,*不包括* 它的界定符“rn”
- 是发送的数据如果在取回请求中发送了一些键名,而服务器没有送回项目列表,这意味着服务器没这些键名(可能因为它们从未被存储,或者为给其他内容腾出空间而被删除,或者到期,或者被已客户端删除)。
命令“delete”允许从外部删除内容:
- 是客户端希望服务器删除的内容的键名
- 是一个单位为秒的时间(或代表直到某一刻的Unix时间),在该时间内服务器会拒绝对于此键名的“add”和 “replace”命令。此时内容被放入 delete队列,无法再通过“get”得到该内容,也无法是用“add”和“replace”命令(但是“set”命令可用)。直到指定时间,这些内容 被最终从服务器的内存中彻底清除。
参数 是可选的,缺省为0(表示内容会立刻清除,并且随后的存储命令均可用)。
此命令有一行回应:
- “DELETEDrn”
表示执行成功
- “NOT_FOUNDrn”
表示没有找到这项内容
参考随后的“flush_all”命令使所有内容无效
命令 “incr” 和 “decr”被用来修改数据,当一些内容需要 替换、增加或减少时。这些数据必须是十进制的32位无符号整新。如果不是,则当作0来处理。修改的内容必须存在,当使用“incr”/“decr”命令修 改不存在的内容时,不会被当作0处理,而是操作失败。
客户端发送命令行:
- 是客户端希望修改的内容的建名
- 是客户端要增加/减少的总数。
回复为以下集中情形:
- “NOT_FOUNDrn”
指示该项内容的值,不存在。
- rn ,是 增加/减少 。
注意”decr”命令发生下溢:如果客户端尝试减少的结果小于0时,结果会是0。”incr” 命令不会发生溢出。
命令”stats” 被用于查询服务器的运行状态和其他内部数据。有两种格式。不带参数的:
这会在随后输出各项状态、设定值和文档。另一种格式带有一些参数:
通过,服务器传回各种内部数据。因为随时可能发生变动,本文不提供参数的种类及其传回数据。
受到无参数的”stats”命令后,服务器发送多行内容,如下:
服务器用以下一行来终止这个清单:
在每行状态中, 是状态的名字, 使状态的数据。 以下清单,是所有的状态名称,数据类型,和数据代表的含义。
在“类型”一列中,”32u”表示32位无符号整型,”64u”表示64位无符号整型,”32u:32u”表示用冒号隔开的两个32位无符号整型。
服务器进程ID
服务器运行时间,单位秒
服务器当前的UNIX时间
服务器的版本号
rusage_user
该进程累计的用户时间
rusage_system
该进程累计的系统时间
curr_items
服务器当前存储的内容数量
total_items
服务器启动以来存储过的内容总数
服务器当前存储内容所占用的字节数
curr_connections
total_connections
服务器运行以来接受的连接总数
connection_structures
服务器分配的连接结构的数量
取回请求总数
存储请求总数
请求成功的总次数
get_misses
请求失败的总次数
bytes_read
服务器从网络读取到的总字节数
bytes_written
服务器向网络发送的总字节数
limit_maxbytes
服务器在存储时被允许使用的字节总数
“flush_all”命令有一个可选的数字参数。它总是执行成功,服务器会发送“OKrn”回应。它的效果是使已经存在的项目立即失效(缺省),或在指 定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行。flush_all 效果具体如下:它导致所有更新时间早于flush_all所设定时间的项目,在被执行取回命令时命令被忽略。
“version”命令没有参数:
在回应中,服务器发送:
“VERSION rn”
是服务器的版本字串。
“quit”命令没有参数:
接收此命令后,服务器关闭连接。不过,客户端可以在不再需要时,简单地关闭连接就行,并不一定需要发送这个命令。
当来自客户端的连接数远大于TCP连接的上限时,可以使用基于UDP的接口。UDP接口不能保证传输到位,所以只有在不要求成功的操作中使用;比如被用于一个“get”请求时,会因不当的缓存处理而发生错误或回应有遗失。
每个UDP数据包都包含一个简单的帧头,数据之后的内容与TCP协议的描述类似。在执行所产生的数据流中,请求必须被包含在单独的一个UDP数据包中,但是回应可能跨越多个数据包。(只有“get”和“set”请求例外,跨越了多个数据包)
帧头有8字节长,如下(均由16位整数组成,网络字节顺序,高位在前):
0-1 请求ID2-3 序号4-5 该信息的数据包总数6-7 保留位,必须为0
请求ID有客户端提供。一般它会是一个从随机基数开始的递增值,不过客户端想用什么样的请求ID都可以。服务器的回应会包含一个和请求中的同样的 ID。客户端使用请求ID来区分每一个回应。任何一个没有请求ID的数据包,可能是之前的请求遭到延迟而造成的,应该被丢弃。序号的返回是从0到n- 1,n是该条信息的数据包数量。
memcached 的客户端使用TCP链接 与 服务器通讯。(UDP接口也同样有效,参考后文的 “UDP协议” )一个运行中的memcached服务器监视一些(可设置)端口。客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:132307次
积分:1972
积分:1972
排名:第10787名
原创:49篇
转载:126篇
评论:28条
(1)(2)(4)(1)(1)(1)(3)(4)(2)(22)(6)(4)(1)(2)(3)(4)(3)(23)(10)(27)(6)(8)(14)(21)(3)}

我要回帖

更多关于 memcached启动失败 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信