Memcache协议中文版
Memcache基础教程
Memcache基础教程Memcache是什么Memcache是的⼀个项⽬,最早是为 LiveJournal 服务的,⽬前全世界不少⼈使⽤这个缓存项⽬来构建⾃⼰⼤负载的⽹站,来分担数据库的压⼒。
它可以应对任意多个连接,使⽤⾮阻塞的⽹络IO。
由于它的⼯作机制是在内存中开辟⼀块空间,然后建⽴⼀个HashTable,Memcached⾃管理这些HashTable。
Memcache官⽅⽹站:/memcached,更多详细的信息可以来这⾥了解 :)为什么会有Memcache和memcached两种名称?其实Memcache是这个项⽬的名称,⽽memcached是它服务器端的主程序⽂件名,知道我的意思了把~~~~。
⼀个是项⽬名称,⼀个是主程序⽂件名,在⽹上看到了很多⼈不明⽩,于是混⽤了。
Memcache的安装分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(⼀般都是linux系统)上安装Memcache实现数据的存储所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接⼝提供)去使⽤服务器端的Memcache提供的函数,需要php添加扩展。
具体的配置⼤家可以参考::/257.html:/258.html:/259.html:/261.html:/306.html:/395.htmlPHP的Memcache1 < ?php2//连接3$mem = new Memcache;4$mem->connect("192.168.0.200", 12000);56//保存数据7$mem->set('key1', 'This is first value', 0, 60);8$val = $mem->get('key1');9echo "Get key1 value: " . $val ."<br />";1011//替换数据12$mem->replace('key1', 'This is replace value', 0, 60);13$val = $mem->get('key1');14echo "Get key1 value: " . $val . "<br />";1516//保存数组17$arr = array('aaa', 'bbb', 'ccc', 'ddd');18$mem->set('key2', $arr, 0, 60);19$val2 = $mem->get('key2');20echo "Get key2 value: ";21print_r($val2);22echo "<br />";2324//删除数据25$mem->delete('key1');26$val = $mem->get('key1');27echo "Get key1 value: " . $val . "<br />";2829//清除所有数据30$mem->flush();31$val2 = $mem->get('key2');32echo "Get key2 value: ";33print_r($val2);34echo "<br />";3536//关闭连接37$mem->close();38 ?>如果正常的话,浏览器将输出:Get key1 value: This is first valueGet key1 value: This is replace valueGet key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )Get key1 value:Get key2 value:程序代码分析初始化⼀个Memcache的对象:$mem = new Memcache;连接到我们的Memcache服务器端,第⼀个参数是服务器的IP地址,也可以是主机名,第⼆个参数是Memcache的开放的端⼝:$mem->connect("192.168.0.200", 12000);保存⼀个数据到Memcache服务器上,第⼀个参数是数据的key,⽤来定位⼀个数据,第⼆个参数是需要保存的数据内容,这⾥是⼀个字符串,第三个参数是⼀个标记,⼀般设置为0或者MEMCACHE_COMPRESSED就⾏了,第四个参数是数据的有效期,就是说数据在这个时间内是有效的,如果过去这个时间,那么会被Memcache服务器端清除掉这个数据,单位是秒,如果设置为0,则是永远有效,我们这⾥设置了60,就是⼀分钟有效时间:$mem->set('key1', 'This is first value', 0, 60);从Memcache服务器端获取⼀条数据,它只有⼀个参数,就是需要获取数据的key,我们这⾥是上⼀步设置的key1,现在获取这个数据后输出输出:$val = $mem->get('key1');echo "Get key1 value: " . $val;现在是使⽤replace⽅法来替换掉上⾯key1的值,replace⽅法的参数跟set是⼀样的,不过第⼀个参数key1是必须是要替换数据内容的key,最后输出了:$mem->replace('key1', 'This is replace value', 0, 60);$val = $mem->get('key1');echo "Get key1 value: " . $val;同样的,Memcache也是可以保存数组的,下⾯是在Memcache上⾯保存了⼀个数组,然后获取回来并输出$arr = array('aaa','bbb','ccc', 'ddd');$mem->set('key2', $arr, 0, 60);$val2 = $mem->get('key2');print_r($val2);现在删除⼀个数据,使⽤delte接⼝,参数就是⼀个key,然后就能够把Memcache服务器这个key的数据删除,最后输出的时候没有结果$mem->delete('key1');$val = $mem->get('key1');echo "Get key1 value: " . $val . "<br>";最后我们把所有的保存在Memcache服务器上的数据都清除,会发现数据都没有了,最后输出key2的数据为空,最后关闭连接$mem->flush();$val2 = $mem->get('key2');echo "Get key2 value: ";print_r($val2);echo "<br>";Memcache的使⽤使⽤Memcache的⽹站⼀般流量都是⽐较⼤的,为了缓解数据库的压⼒,让Memcache作为⼀个缓存区域,把部分信息保存在内存中,在前端能够迅速的进⾏存取。
Memcache协议中文版
Memcache协议中文版写在前头偶然之间看到本文的中英文对照版本,感觉看起来不是很方便,于是花费了半个小时的时间,仔细整理出了独立的中文版本,并记录下来。
协议memcached 的客户端使用TCP链接与服务器通讯。
(UDP接口也同样有效,参考后文的“UDP协议”)一个运行中的memcached服务器监视一些(可设置)端口。
客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接。
结束会话不需要发送任何命令。
当不再需memcached服务时,要客户端可以在任何时候关闭连接。
需要注意的是,鼓励客户端缓存这些连接,而不是每次需要存取数据时都重新打开连接。
这是因为memcached 被特意设计成及时开启很多连接也能够高效的工作(数百个,上千个如果需要的话)。
缓存这些连接,可以消除建立连接所带来的开销(/*/相对而言,在服务器端建立一个新连接的准备工作所带来的开销,可以忽略不计。
)。
在memcache协议中发送的数据分两种:文本行和自由数据。
文本行被用于来自客户端的命令和服务器的回应。
自由数据用于客户端从服务器端存取数据时。
同样服务器会以字节流的方式传回自由数据。
/*/服务器不用关心自由数据的字节顺序。
自由数据的特征没有任何限制;但是通过前文提到的文本行,这项数据的接受者(服务器或客户端),便能够精确地获知所发送的数据库的长度。
文本行固定以“\r\n”(回车符紧跟一个换行符)结束。
自由数据也是同样会以“\r\n”结束,但是 \r(回车符)、\n(换行符),以及任何其他8位字符,均可出现在数据中。
因此,当客户端从服务器取回数据时,必须使用数据区块的长度来确定数据区块的结束位置,而不要依据数据区块末尾的“\r\n”,即使它们固定存在于此。
键值存储在memcached中的数据通过键值来标识。
键值是一个文本字符串,对于需要存取这项数据的客户端而言,它必须是唯一的。
键值当前的长度限制设定为250字符(当然,客户端通常不会用到这么长的键);键值中不能使用制表符和其他空白字符(例如空格,换行等)。
memcached 手册
memcached 手册Memcached是一个高性能的开源内存对象缓存系统,被广泛地应用于提升网站和应用程序性能。
该手册将介绍Memcached的基本概念、安装配置、常用命令以及最佳实践等关键内容,旨在帮助读者快速了解和使用Memcached。
一、Memcached概述Memcached可以看作是一个分布式的缓存系统,它将数据缓存在内存中,并提供了简单的键值对存取接口。
相比于传统的关系型数据库,Memcached具有更快的读写速度和更高的并发能力,因为它直接操作内存而避免了磁盘I/O。
此外,Memcached采用了多台服务器的分布式架构,能够提供横向扩展的能力。
二、安装与配置1.下载和安装:Memcached可以从官方网站或其他镜像站点下载安装包,并根据相应平台的指引进行安装。
安装完成后,可以通过运行"memcached"命令来启动Memcached服务。
2.配置文件:Memcached的默认配置文件是"memcached.conf",可以通过修改该文件中的参数来调整Memcached的行为。
主要的配置项包括监听端口、最大连接数、内存容量等。
三、常用命令1.存储数据:用"set"命令可以将键值对存入Memcached中,例如:"set key 0 3600 5"表示存储一个key为"key",值为"0",并设置过期时间为3600秒。
如果要存储的值超出了内存容量限制,旧的数据将会被替换。
2.获取数据:用"get"命令可以从Memcached中获取指定键对应的值,例如:"get key"可以获取到之前存储的值。
如果该键不存在,返回结果将是"END"。
3.删除数据:用"delete"命令可以从Memcached中删除指定键对应的值,例如:"delete key"可以删除之前存储的值。
memcached文档
Memcached入门学习文档——小兵突击@序:什么是memcached:Free & open source, high-performance, distributed memory object caching system自由、开源、高性能、分布式的内存对象缓存系统。
由livejounal旗下的danga公司开发的老牌的nosql应用nosql:not only sql,即不仅仅是关系型数据库。
特点:key-value键值对存储,如memcached、redis或基于文档存储:如mongoldb一、使用前的准备(关于telnet)Telnet用于远程操作互联网中的设备或终端计算机服务器,可以有效的减少现场操作的麻烦。
因为设备或终端是遍布整个省或市,有的甚至是国外,如何高效的处理问题是当务之急。
除了telnet还可以ssh使用crt软件登陆,telnet开启的话比较方便windows自带的cmd命令行下就可以运行。
telnet命令格式(cmd窗口下):telnet localhost(ip地址) 端口号,如:telnet 192.168.5.109 11211Win7系统中使用想使用telnet命令时往往会出现如下错误:【'telnet'不是内部或外部命令,也不是可运行的程序或批处理文件】。
解决方法:①首先打开[控制面板],找到[程序和功能],然后点击左侧的[打开或关闭Windows功能]②打开或关闭Windows功能③等待一会就OK啦二、Linux下安装memcached1、安装编译工具gcc make libtool autoconfig 的命令:yum install gcc make libtool autoconfig2、安装memcached的依赖库命令:wget --no-check-certificate3、wget (memcached源文件)4、先装依赖库。
Memcache资料
Memcache缓存1.MyBatis缓存MyBatis缓存分为一级缓存与二级缓存一级缓存:基于PerpetualCache 的HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有Cache 就将清空。
二级缓存:与一级缓存其机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(Namespace)缓存更新机制:当某一作用域(一级缓存Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有select 中的缓存将被清空避免使用二级缓存:/isea533/article/details/445662572.Memcachea)简介Memcache 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
Memcache基于一个存储键/值对的hashmapb)安装安装命令-d 选项是启动一个守护进程-m 是分配给Memcache使用的内存数量,单位是MB,默认是64MB-u 是运行Memcache的用户-L 是监听的服务器IP地址,默认应该是本机-I page大小,默认1M-p 是设置Memcache监听的端口,默认是11211,最好是1024以上的端口-c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定-P 是设置保存Memcache的pid文件位置-h 打印帮助信息-f 指定chunk增长因子大小,该值越小所能提供的chunk间隔越小,可以减少内存的浪费-n chunk最小尺寸-v 输出警告和错误信息-vv 打印客户端的请求和返回信息PS:Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存,要使用更多内存,可以分多个端口开启多个Memcached进程最大30天的数据过期时间,设置为永久的也会在这个时间过期Key: 最大键长为250字节,大于长度无法存储,常量KEY_MAX_LENGTH 250控制Value: 单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制运行命令1. 使用telnet连接Memcache服务器端口2. 连接上端口输入stats命令,获取描述Memcache服务器运行情况的参数操作命令 /zzulp/article/details/7823511 命令参数以及用法: 1. s et:命令用于向缓存添加新的键值对。
memcache协议中英文对照(三)
bytes_written 64u 服务器向网络发送的总字节数 Total number of bytes sent by this server to
network
limit_maxbytes 32u 服务器在存储时被允许使用的字节总数 Number of bytes this server is allowed to
found present
get_misses 32u 请求失败的总次数 Number of items that have been requested
and not found
bytes_read 64u 服务器从网络读取到的总字节数 Total number of bytes read by this server
memcache协议中英文对照(三)2009-11-20 16:06各种状态 General-purpose statistics
受到无参数的"stats"命令后,服务器发送多行内容,如下: Upon receiving the "stats" command without arguments, the server sents
“quit”命令没有参数: "quit" is a command with no arguments:
quit\r\n
接收此命令后,服务器关闭连接。不过,客户端可以在不再需要时,简单地关闭连接就行,并不一定需要发送这个命令。 Upon receiving this command, the server closes the connection. However, the client may also simply close the connection when it no longer needs it, without issuing this command.
MemCache详细解读
MemCache详细解读MemCache是什么MemCache是⼀个⾃由、源码开放、⾼性能、分布式的分布式内存对象缓存系统,⽤于动态Web应⽤以减轻数据库的负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从⽽提⾼了⽹站访问的速度。
MemCaChe是⼀个存储键值对的HashMap,在内存中对任意的数据(⽐如字符串、对象等)所使⽤的key-value存储,数据可以来⾃数据库调⽤、API调⽤,或者页⾯渲染的结果。
MemCache设计理念就是⼩⽽强⼤,它简单的设计促进了快速部署、易于开发并解决⾯对⼤规模的数据缓存的许多难题,⽽所开放的API使得MemCache能⽤于Java、C/C++/C#、Perl、Python、PHP、Ruby等⼤部分流⾏的程序语⾔。
另外,说⼀下MemCache和MemCached的区别:1、MemCache是项⽬的名称2、MemCached是MemCache服务器端可以执⾏⽂件的名称MemCache访问模型为了加深理解,我模仿着原阿⾥技术专家李智慧⽼师《⼤型⽹站技术架构核⼼原理与案例分析》⼀书MemCache部分,⾃⼰画了⼀张图:特别澄清⼀个问题,MemCache虽然被称为"分布式缓存",但是MemCache本⾝完全不具备分布式的功能,MemCache集群之间不会相互通信(与之形成对⽐的,⽐如JBoss Cache,某台服务器有缓存数据更新时,会通知集群中其他机器更新缓存或清除缓存数据),所谓的"分布式",完全依赖于客户端程序的实现,就像上⾯这张图的流程⼀样。
同时基于这张图,理⼀下MemCache⼀次写缓存的流程:1、应⽤程序输⼊需要写缓存的数据2、API将Key输⼊路由算法模块,路由算法根据Key和MemCache集群服务器列表得到⼀台服务器编号3、由服务器编号得到MemCache及其的ip地址和端⼝号4、API调⽤通信模块和指定编号的服务器通信,将数据写⼊该服务器,完成⼀次分布式缓存的写操作读缓存和写缓存⼀样,只要使⽤相同的路由算法和服务器列表,只要应⽤程序查询的是相同的Key,MemCache客户端总是访问相同的客户端去读取数据,只要服务器中还缓存着该数据,就能保证缓存命中。
memcached学习文档
一、概述1. MemcacheMemcache(Memcached)是集群环境下的缓存解决方案。
Memcache 是的一个项目,最早是为LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
它可以应对任意多个连接,使用非阻塞的网络IO。
它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
Memcache官方网站:/memcached,更多详细的信息可以来这里了解。
2. 为什么会有Memcache和memcached两种名称其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了吧。
一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
3. 如何在Java开发中使用Memcache在Java开发中使用Memcache,一般要用到以下几个程序:1) Memcached该程序用来在Linux或Windows服务器上建立和管理缓存。
其项目网址为:/memcached/。
2) MagentMagent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,其项目网址为:/p/memagent/。
3) Memcached至于Memcached的客户端程序,一般推荐用memcached client for java,为什么推荐用这种客户端,后面会讲到具体的原因,其项目的网址为:/gwhalin/Memcached-Java-Client/。
4) 其它程序i. Libevent在Linux环境下应用Memcache时,Memcache用到了libevent这个库,用于Socket的处理,所以还需要安装libevent。
libevent的最新版本是libevent-1.4.13。
(如果你的系统已经安装了libevent,可以不用安装)。
memcached参数
memcached参数Memcached是一种高性能的分布式内存对象缓存系统,常用于提高Web应用程序的性能和扩展性。
Memcached的设计目标是提供一个简单、快速、可扩展的缓存解决方案,而其参数配置则对其性能和稳定性至关重要。
以下是一些常见的Memcached参数及其作用:2. -U,--udp:启用UDP监听功能。
默认情况下,Memcached使用TCP进行通信,但也可以选择启用UDP。
使用UDP可以提高性能,但同时也可能会导致数据丢失。
3. -l,--listen:指定绑定的IP地址。
默认情况下,Memcached会绑定到所有可用的IP地址上,但可以通过此参数来指定要绑定的特定IP地址。
4. -u,--user:指定运行Memcached进程的用户。
可以使用此参数来提高服务器的安全性,限制只有指定用户才能运行Memcached。
5. -m,--memory:指定Memcached使用的内存大小(以MB为单位)。
这个参数非常重要,它决定了可以缓存的对象数量和大小。
应根据预期的负载和可用内存来调整此参数。
6. -c,--connections:指定Memcached服务器能够处理的最大并发连接数。
默认情况下,这个值是1024,但在高并发情况下,可能需要增加这个值来处理更多的连接。
7. -t,--threads:指定Memcached使用的线程数量。
默认情况下,Memcached会根据可用的处理器核心数量来自动配置线程数,但也可以通过此参数来手动设置线程数量。
9. -R,--max-reqs-per-event:指定每个事件处理器循环中处理的最大请求数。
默认情况下,Memcached每次处理一个请求,但这个参数可以用来限制每个事件处理器循环中处理的请求数,以提高其他连接的响应速度。
以上是一些常用的Memcached参数,通过对这些参数的配置,可以根据实际需求来优化Memcached的性能和稳定性。
memcached字符编码
memcached字符编码Memcached 是一款开源的高性能分布式内存对象缓存系统,它主要用于缓存数据库查询结果、API调用结果或其他计算成本高的操作的结果,从而提高应用程序的性能和响应速度。
在 Memcached 中,字符编码主要涉及两个方面,存储数据时的编码和读取数据时的解码。
1. 存储数据时的编码:当我们向 Memcached 存储数据时,通常是以字符串的形式进行存储。
Memcached 默认使用的字符编码是 ASCII 编码,它是一种基于拉丁字母的字符编码标准,支持英文字母、数字和一些特殊字符。
ASCII 编码每个字符占用一个字节的存储空间。
另外,Memcached 也支持使用其他字符编码存储数据,如UTF-8 编码。
UTF-8 是一种可变长度的 Unicode 字符编码,它可以表示世界上几乎所有的字符。
UTF-8 编码中,英文字母和数字仍然只占用一个字节的存储空间,而中文、日文、韩文等非拉丁字符则占用多个字节的存储空间。
2. 读取数据时的解码:当我们从 Memcached 中读取数据时,Memcached 会将存储的字符串数据解码成对应的字符编码。
如果存储时使用的是 ASCII编码,那么读取时就会解码成 ASCII 编码的字符串。
同理,如果存储时使用的是 UTF-8 编码,那么读取时就会解码成 UTF-8 编码的字符串。
在读取数据时,我们的应用程序需要根据具体的需求和使用的编程语言,将解码后的字符串再进行进一步的处理和转换。
例如,在使用 Python 进行开发时,可以使用内置的字符串处理函数来处理解码后的字符串。
需要注意的是,Memcached 本身并不关心存储的数据的具体编码方式,它只是将数据当作二进制的字节流进行存储和读取。
因此,在使用 Memcached 存储和读取数据时,我们需要确保应用程序和Memcached 之间的数据编码方式是一致的,以避免出现乱码或数据解析错误的情况。
memcache 用法
memcache 用法摘要:1.简介2.Memcache的安装与配置3.Memcache的使用方法4.Memcache的数据类型5.Memcache的应用场景6.Memcache的优缺点7.总结正文:Memcache是一款高性能的分布式内存对象缓存系统,主要用于提高网站访问速度和减轻服务器负载。
它通过将热点数据存储在内存中,以减少对数据库的访问次数,从而提高网站性能。
1.简介Memcache是一个高性能的分布式内存对象缓存系统,主要用于提高网站访问速度和减轻服务器负载。
它通过将热点数据存储在内存中,以减少对数据库的访问次数,从而提高网站性能。
Memcache支持多种数据类型,包括字符串、整数、浮点数等。
2.Memcache的安装与配置要使用Memcache,首先需要在服务器上安装Memcache服务端。
安装完成后,需要对Memcache进行配置,包括设置内存大小、连接数等参数。
配置完成后,启动Memcache服务。
3.Memcache的使用方法Memcache的使用方法主要包括以下几个步骤:(1)连接Memcache服务器:使用PHP的Memcache扩展库,通过`memcache_connect()`函数连接到Memcache服务器。
(2)设置缓存数据:使用`memcache_set()`函数将数据存储到Memcache中。
(3)获取缓存数据:使用`memcache_get()`函数从Memcache中获取数据。
(4)删除缓存数据:使用`memcache_delete()`函数从Memcache中删除数据。
(5)清空缓存:使用`memcache_clear_cache()`函数清空Memcache 中的所有数据。
4.Memcache的数据类型Memcache支持多种数据类型,包括字符串、整数、浮点数等。
此外,Memcache还支持数据结构,如数组、链表等。
5.Memcache的应用场景Memcache主要应用于以下场景:(1)缓存数据库查询结果:将经常访问的数据从数据库中取出,存储到Memcache中,以减少对数据库的访问次数。
memcached中文协议
Memcached通信协议(中文版)memcache通信协议英文水平很烂,做梦都想着能把英语学习,可以使用一口流利的英文和 洋鬼子交流,顺便忽悠下自己的同胞。
没有地方学习英语,看还可以,网上有很多关于计算机的英文文献,写还行,说就完全不可能了。
在以后的工作中慢慢的锻炼 自己的英语水平吧,先翻译一下一些计算机的英文文献,锻炼下^_^,能读则读不能读则一笑置之。
协议关键字 Keys命令Commands超时时间 Expiration times错误信息 Error strings存储命令 Storage commands读取命令 Retrieval command删除 Deletion增加/减少 Increment/Decrement统计 Statistics多用途统计 General-purpose statistics其他命令 Other commandsUDP协议 UDP protocol协议memcached的客户端通过TCP连接与服务器通信(UDP协议的接口也可以使用,详细说明请参考”UDP 协议”部分)。
一个给定的运行中的memcached服务器在某个(可配置的)端口上监听连接;客户端连接该端口,发送命令给服务器,读取反馈,最后关闭连接。
没有必要发送一个专门的命令去结束会话。
客户端可以在不需要该连接的时候就关闭它。
注意:我们鼓励客户端缓存它们与服务器的连接,而不是每次要存储或读取数据的时候再次重新建立与服务器的连接。
memcache同时打开很多连接不会对性能造成到大的影响,这是因为memcache在设计之处,就被设计成即使打开了很多连接(数百或者需要时上千个连接)也可以高效的运行。
缓存连接可以节省与服务器建立TCP连接的时间开销(于此相比,在服务器段为建立一个新的连接所做准备的开销可以忽略不计)。
memcache通信协议有两种类型的数据:文本行和非结构化数 据。
文本行用来发送从客户端到服务器的命令以及从服务器回送的反馈信息。
memcached 参数
memcached参数
Memcached是一种高性能的分布式内存缓存系统,它常用于提升Web应用程序的性能和可扩展性。
以下是一些常见的Memcached参数和其作用的简要说明:
1.`-p`或`--port`:指定Memcached服务器监听的端口号,默认为11211。
2.`-l`或`--listen`:指定Memcached服务器监听的IP地址,默认为所有可用地址。
3.`-m`或`--memory`:指定分配给Memcached的内存容量,以MB为单位。
4.`-c`或`--connections`:指定Memcached服务器可以同时处理的最大连接数。
5.`-t`或`--threads`:指定Memcached服务器使用的线程数。
6.`-k`或`--lock-memory`:锁定分配给Memcached的内存,防止其他进程使用。
7.`-M`或`--disable-eviction`:禁用缓存淘汰机制,即不会自动删除过期或较少使用的数据。
8.`-I`或`--max-item-size`:设置Memcached中每个存储项的最大大小,默认为1MB。
9.`-f`或`--factor`:设置缓存大小增长的因子,用于动态扩展内存。
10.`-n`或`--min-threads`:指定空闲线程的最小数量,用于处理请求。
11.`-R`或`--max-requests`:限制每个连接的最大请求数。
12.`-B`或`--binary-protocol`:启用Memcached的二进制协议。
msys2 编译memcache
msys2 编译memcache要使用MSYS2编译Memcache,您需要按照以下步骤进行操作:1. 安装MSYS2:首先,您需要在您的计算机上安装MSYS2。
MSYS2是一个用于Windows的模拟Linux环境,它提供了必要的工具和库,以便在Windows上编译和运行Linux应用程序。
您可以从MSYS2官方网站下载并安装它。
2. 安装依赖项:接下来,您需要安装Memcache所需的依赖项。
在MSYS2终端中,运行以下命令来安装它们:```shellpacman -S gcc make openssl libevent```这些依赖项包括GCC编译器、Make工具、OpenSSL库和libevent 库。
3. 获取Memcache源代码:接下来,您需要获取Memcache的源代码。
您可以从Memcache的官方网站或Git仓库下载最新版本的源代码。
确保下载与您想要编译的Memcache版本相对应的源代码。
4. 解压源代码:将下载的源代码文件解压到您选择的目录中。
5. 配置编译选项:在MSYS2终端中,进入解压后的源代码目录,并运行以下命令来配置Memcache的编译选项:```shell./configure --prefix=/usr/local/memcache```该命令将为Memcache配置适当的编译选项,并将安装路径设置为`/usr/local/memcache`。
6. 编译Memcache:配置完成后,运行以下命令来编译Memcache:```shellmake```这将使用MSYS2提供的工具链编译Memcache。
编译过程可能需要一些时间,具体取决于您的计算机性能。
7. 安装Memcache:编译完成后,运行以下命令来安装Memcache:```shellmake install```这将将编译得到的可执行文件和库文件安装到指定的目录中。
8. 验证安装:安装完成后,您可以通过在MSYS2终端中运行以下命令来验证Memcache是否正确安装:```shell/usr/local/memcache/bin/memcached -h```如果一切顺利,您将看到Memcache的帮助信息输出到终端上。
Memcache中文文档..
Memcache::connect — Open memcached server connection说明:该方法用来建立一个内存连接,参数情况详见如下: Boolean connect ( string host [, int port [, int timeout]] ) (1)连接服务器名称或IP(2) memcached端口,默认:11211(3)使用该内存连接时间Memcache::add — Add an item to the server说明:该方法用来将一个变量或对象加入到内存中,参数情况详见如下:Boolean add ( string key, mixed var [, int flag [, int expire]] )(1) key名称;(2)要加入内存的对象或变量;(3)是否进行压缩(个人建议不进行压缩,因为压缩后会造成后面很多操作不能实现且PHP的版本更新是否会影响字串变化无法知道);(4)在内存保留时间(以秒,SEC为单位计算)。
Memcache::addServer — Add a memcached server to connection pool说明:该方法用来将另一台memcached服务器加入时使用,参数情况详见如下: Boolean addServer ( string host [, int port [, bool persistent [, int weight [, int timeout [, int retry_interval [, bool status [, callbackfailure_callback]]]]]]] )(1)追加服务器名称或IP(2)追加服务器memcached端口,默认11211(3)是否使用持续连接(4)指定使用该memcached服务器内存大小(5)追加服务器连接时间(6)若与追加服务器连接不上时,重试时间间隔设定。
memcache安装(copy)
memcached命令解析memcached命令•标准协议•No Reply•存储命令•set命令•add命令•replace命令•append命令•prepend命令•cas命令•读取命令•get命令•gets命令•删除命令•incr/decr命令•查看memcached使用状态•stats命令•stats items命令•stats slabs命令•stats sizes命令•flush_all命令全部协议在Protocol Documentation中标准协议memcached所有的标准协议包含在对item执行命令过程中,一个item包含:•一个key•一个32位的标志值•以秒为单位的失效时间•一个64为的CAS值,这个是唯一的•数据CAS是可选的,可以使用“-C”禁止CAS。
No Reply大多数ascii命令允许“noreply”。
建议大家在ascii协议下别用“noreply”,因为那样不会报请求错误。
“noreply”的目的是在执行交互命令(如:set、add)后,避免等待返回的包。
二进制协议将“noreply”定义为声明。
如果你的客户端支持或者使用二进制协议,那么你将会用到它。
存储命令首先客户端向服务器按照如下格式发送命令行:"set"表示按照相应的<key>存储该数据。
"add"表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败。
"replace"表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败b) <key> 客户端需要保存数据的key。
c) <flags> 是一个16位的无符号的整数(以十进制的方式表示)。
该标志将和需要存储的数据一起存储,并在客户端get数据时返回。
客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。
php memcached 用法
php memcached 用法“php memcached 用法”Memcached是一种高性能分布式内存对象缓存系统,常用于缓存常用数据,提高Web应用程序的性能。
在PHP中,Memcached可以通过扩展或使用Memcached类来实现。
本文将深入探讨Memcached的用法,包括安装、配置、连接、存储与获取数据、过期时间设置和常见问题解决等方面的内容。
第一步:安装和配置Memcached要使用PHP的Memcached扩展,首先需要在服务器上安装Memcached 软件包。
在Linux系统上,我们可以通过包管理器来安装。
例如,对于Ubuntu,可以使用以下命令安装:sudo apt-get install memcached安装好Memcached之后,我们需要编辑php.ini文件来启用Memcached扩展。
找到该文件(通常位于/etc/php/7.4/apache2/目录中)并打开它。
在文件中找到一个名为"extension"的行,然后在该行下面添加以下代码:extension=memcached.so保存并关闭php.ini文件。
重启Web服务器,使配置生效。
第二步:连接Memcached服务器在PHP中,我们可以通过两种方式连接到Memcached服务器:使用Memcached扩展或使用Memcached类。
以下是实现两种方法的示例代码:1. 使用Memcached扩展memcached = new Memcached();memcached->addServer('localhost', 11211);在这个例子中,我们创建了一个Memcached实例,并添加了一个服务器。
这里的localhost是Memcached服务器的主机名或IP地址,11211是Memcached服务器的默认端口号。
2. 使用Memcached类memcached = new Memcached();memcached->addServer('localhost', 11211);与使用Memcached扩展相比,使用Memcached类的代码几乎是一样的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
写在前头偶然之间看到本文的中英文对照版本,感觉看起来不是很方便,于是花费了半个小时的时间,仔细整理出了独立的中文版本,并记录下来。
协议memcached 的客户端使用TCP链接与服务器通讯。
(UDP接口也同样有效,参考后文的“UDP协议” )一个运行中的memcached服务器监视一些(可设置)端口。
客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接。
结束会话不需要发送任何命令。
当不再需memcached服务时,要客户端可以在任何时候关闭连接。
需要注意的是,鼓励客户端缓存这些连接,而不是每次需要存取数据时都重新打开连接。
这是因为memcached 被特意设计成及时开启很多连接也能够高效的工作(数百个,上千个如果需要的话)。
缓存这些连接,可以消除建立连接所带来的开销(/*/相对而言,在服务器端建立一个新连接的准备工作所带来的开销,可以忽略不计。
)。
在memcache协议中发送的数据分两种:文本行和自由数据。
文本行被用于来自客户端的命令和服务器的回应。
自由数据用于客户端从服务器端存取数据时。
同样服务器会以字节流的方式传回自由数据。
/*/服务器不用关心自由数据的字节顺序。
自由数据的特征没有任何限制;但是通过前文提到的文本行,这项数据的接受者(服务器或客户端),便能够精确地获知所发送的数据库的长度。
文本行固定以“\r\n”(回车符紧跟一个换行符)结束。
自由数据也是同样会以“\r\n”结束,但是\r(回车符)、\n(换行符),以及任何其他8位字符,均可出现在数据中。
因此,当客户端从服务器取回数据时,必须使用数据区块的长度来确定数据区块的结束位置,而不要依据数据区块末尾的“\r\n”,即使它们固定存在于此。
键值存储在memcached中的数据通过键值来标识。
键值是一个文本字符串,对于需要存取这项数据的客户端而言,它必须是唯一的。
键值当前的长度限制设定为250字符(当然,客户端通常不会用到这么长的键);键值中不能使用制表符和其他空白字符(例如空格,换行等)。
命令所有命令分为3种类型:存储命令(有3项:’set’、’add’、’repalce’)指示服务器储存一些由键值标识的数据。
客户端发送一行命令,后面跟着数据区块;然后,客户端等待接收服务器回传的命令行,指示成功与否。
取回命令(只有一项:’get’)指示服务器返回与所给键值相符合的数据(一个请求中右一个或多个键值)。
客户端发送一行命令,包括所有请求的键值;服务器每找到一项内容,都会发送回客户端一行关于这项内容的信息,紧跟着是对应的数据区块;直到服务器以一行“END”回应命令结束。
/*?*/其他的命令都不能携带自由数据。
在这些命令中,客户端发送一行命令,然后等待(由命令所决定)一行回应,或最终以一行“END”结束的多行命令。
一行命令固定以命令名称开始,接着是以空格隔开的参数(如果有参数的话)。
命令名称大小写敏感,并且必须小写。
一些客户端发送给服务器的命令会包含一些时限(针对内容或客户端请求的操作)。
这时,时限的具体内容既可以是Unix 时间戳(从1970年1月1日开始的秒钟数),或当前时间开始的秒钟数。
对后者而言,不能超过60*60*24*30(30天);如果超出,服务器将会理解为Unix 时间戳,而不是从当前时间起的秒偏移。
错误字串每一个由客户端发送的命令,都可能收到来自服务器的错误字串回复。
这些错误字串会以三种形式出现:- "ERROR\r\n"意味着客户端发送了不存在的命令名称。
- "CLIENT_ERROR <error>\r\n"意味着输入的命令行里存在一些客户端错误,例如输入未遵循协议。
<error>部分是人类易于理解的错误解说……- "SERVER_ERROR <error>\r\n"意味着一些服务器错误,导致命令无法执行。
<error>部分是人类易于理解的错误解说。
在一些严重的情形下(通常应该不会遇到),服务器将在发送这行错误后关闭连接。
这是服务器主动关闭连接的唯一情况。
在后面每项命令的描述中,这些错误行不会再特别提到,但是客户端必须考虑到这些它们存在的可能性。
存储命令首先,客户端会发送一行像这样的命令:<command name> <key> <flags> <exptime> <bytes>\r\n- <command name> 是set, add, 或者repalce∙set 意思是“储存此数据”∙add 意思是“储存此数据,只在服务器*未*保留此键值的数据时”∙replace意思是“储存此数据,只在服务器*曾*保留此键值的数据时” - <key> 是接下来的客户端所要求储存的数据的键值- <flags> 是在取回内容时,与数据和发送块一同保存服务器上的任意16位无符号整形(用十进制来书写)。
客户端可以用它作为“位域”来存储一些特定的信息;它对服务器是不透明的。
- <exptime> 是终止时间。
如果为0,该项永不过期(虽然它可能被删除,以便为其他缓存项目腾出位置)。
如果非0(Unix时间戳或当前时刻的秒偏移),到达终止时间后,客户端无法再获得这项内容。
- <bytes> 是随后的数据区块的字节长度,不包括用于分野的“\r\n”。
它可以是0(这时后面跟随一个空的数据区块)。
在这一行以后,客户端发送数据区块。
<data block>\r\n- <data block> 是大段的8位数据,其长度由前面的命令行中的<bytes>指定。
发送命令行和数据区块以后,客户端等待回复,可能的回复如下:- "STORED\r\n"表明成功.- "NOT_STORED\r\n"表明数据没有被存储,但不是因为发生错误。
这通常意味着add 或replace命令的条件不成立,或者,项目已经位列删除队列(参考后文的“delete”命令)。
取回命令一行取回命令如下:get <key>*\r\n- <key>* 表示一个或多个键值,由空格隔开的字串这行命令以后,客户端的等待0个或多个项目,每项都会收到一行文本,然后跟着数据区块。
所有项目传送完毕后,服务器发送以下字串:"END\r\n"来指示回应完毕。
服务器用以下形式发送每项内容:VALUE <key> <flags> <bytes>\r\n<data block>\r\n- <key> 是所发送的键名- <flags> 是存储命令所设置的记号- <bytes> 是随后数据块的长度,*不包括* 它的界定符“\r\n”- <data block> 是发送的数据如果在取回请求中发送了一些键名,而服务器没有送回项目列表,这意味着服务器没这些键名(可能因为它们从未被存储,或者为给其他内容腾出空间而被删除,或者到期,或者被已客户端删除)。
删除命令“delete”允许从外部删除内容:delete <key> <time>\r\n- <key> 是客户端希望服务器删除的内容的键名- <time> 是一个单位为秒的时间(或代表直到某一刻的Unix时间),在该时间内服务器会拒绝对于此键名的“add”和“replace”命令。
此时内容被放入delete队列,无法再通过“get”得到该内容,也无法是用“add”和“replace”命令(但是“set”命令可用)。
直到指定时间,这些内容被最终从服务器的内存中彻底清除。
<time>参数是可选的,缺省为0(表示内容会立刻清除,并且随后的存储命令均可用)。
此命令有一行回应:- "DELETED\r\n"表示执行成功- "NOT_FOUND\r\n"表示没有找到这项内容参考随后的“flush_all”命令使所有内容无效增加/减少命令“incr” 和“decr”被用来修改数据,当一些内容需要替换、增加或减少时。
这些数据必须是十进制的32位无符号整新。
如果不是,则当作0来处理。
修改的内容必须存在,当使用“incr”/“decr”命令修改不存在的内容时,不会被当作0处理,而是操作失败。
客户端发送命令行:incr <key> <value>\r\n或decr <key> <value>\r\n- <key> 是客户端希望修改的内容的建名- <value> 是客户端要增加/减少的总数。
回复为以下集中情形:- "NOT_FOUND\r\n"指示该项内容的值,不存在。
- <value>\r\n ,<value>是增加/减少。
注意"decr"命令发生下溢:如果客户端尝试减少的结果小于0时,结果会是0。
"incr" 命令不会发生溢出。
状态命令"stats" 被用于查询服务器的运行状态和其他内部数据。
有两种格式。
不带参数的:stats\r\n这会在随后输出各项状态、设定值和文档。
另一种格式带有一些参数:stats <args>\r\n通过<args>,服务器传回各种内部数据。
因为随时可能发生变动,本文不提供参数的种类及其传回数据。
各种状态受到无参数的"stats"命令后,服务器发送多行内容,如下:STAT <name> <value>\r\n服务器用以下一行来终止这个清单:END\r\n在每行状态中,<name> 是状态的名字,<value> 使状态的数据。
以下清单,是所有的状态名称,数据类型,和数据代表的含义。
在“类型”一列中,"32u"表示32位无符号整型,"64u"表示64位无符号整型,"32u:32u"表示用冒号隔开的两个32位无符号整型。
名称类型含义pid 32u 服务器进程IDuptime 32u 服务器运行时间,单位秒time 32u 服务器当前的UNIX时间version string 服务器的版本号rusage_user 32u:32u 该进程累计的用户时间(秒:微妙)rusage_system 32u:32u 该进程累计的系统时间(秒:微妙)curr_items 32u 服务器当前存储的内容数量total_items 32u 服务器启动以来存储过的内容总数bytes 64u 服务器当前存储内容所占用的字节数curr_connections 32u 连接数量total_connections 32u 服务器运行以来接受的连接总数connection_structures 32u 服务器分配的连接结构的数量cmd_get 32u 取回请求总数cmd_set 32u 存储请求总数get_hits 32u 请求成功的总次数get_misses 32u 请求失败的总次数bytes_read 64u 服务器从网络读取到的总字节数bytes_written 64u 服务器向网络发送的总字节数limit_maxbytes 32u 服务器在存储时被允许使用的字节总数其它命令“flush_all”命令有一个可选的数字参数。