Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。
Linux系统安装memcached,首先要先安装libevent库。
sudo apt-get install libevent libevent-deve 自动下载安装(Ubuntu/Debian)yum install libevent libevent-deve 自动下载安装(Redhat/Fedora/Centos)
Ubuntu/Debian
sudo apt-get install memcached
Redhat/Fedora/Centos
yum install memcached
FreeBSD
portmaster databases/memcached
从其官方网站(http://memcached.org)下载memcached最新版本。
wget http://memcached.org/latest 下载最新版本tar -zxvf memcached-1.x.x.tar.gz 解压源码cd memcached-1.x.x 进入目录./configure --prefix=/usr/local/memcached 配置make && make test 编译sudo make install 安装
Memcached命令的运行:
$ /usr/local/memcached/bin/memcached -h 命令帮助
注意:如果使用自动安装 memcached 命令位于 /usr/local/bin/memcached。
启动选项:
从终端输入以下命令,启动memcached:
/usr/local/memcached/bin/memcached -p 11211 -m 64m -vvslab class 1: chunk size 88 perslab 11915slab class 2: chunk size 112 perslab 9362slab class 3: chunk size 144 perslab 7281中间省略slab class 38: chunk size 391224 perslab 2slab class 39: chunk size 489032 perslab 2<23 server listening<24 send buffer was 110592, now 268435456<24 server listening (udp)<24 server listening (udp)<24 server listening (udp)<24 server listening (udp)
这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211,最大内存使用量为64M。调试信息的内容大部分是关于存储的信息。
# /usr/local/memcached/bin/memcached -p 11211 -m 64m -d
或者
/usr/local/memcached/bin/memcached -d -m 64M -u root -l 192.168.0.200 -p 11211 -c 256 -P /tmp/memcached.pid
我们可以通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务。
telnet HOST PORT
命令中的 HOST 和 PORT 为运行 Memcached 服务的 IP 和 端口。
以下实例演示了如何连接到 Memcached 服务并执行简单的 set 和 get 命令。
本实例的 Memcached 服务运行的主机为 127.0.0.1(本机) 、端口为 11211。
telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.set foo 0 0 3 保存命令bar 数据STORED 结果get foo 取得命令VALUE foo 0 3 数据bar 数据END 结束行quit 退出
Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
set 命令的基本语法格式如下:
set key flags exptime bytes [noreply] value
参数说明如下:
以下实例中我们设置:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedEND
如果数据设置成功,则输出:
STORED
输出信息说明:
Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。
add 命令的基本语法格式如下:
add key flags exptime bytes [noreply]value
参数说明如下:
以下实例中我们设置:
add new_key 0 900 10data_valueSTOREDget new_keyVALUE new_key 0 10data_valueEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
replace 命令的基本语法格式如下:
replace key flags exptime bytes [noreply]value
参数说明如下:
以下实例中我们设置:
以下实例中我们使用的键位 'mykey' 并存储对应的值 data_value。执行后我们替换相同的 key 的值为 'some_other_value'。
add mykey 0 900 10data_valueSTOREDget mykeyVALUE mykey 0 10data_valueENDreplace mykey 0 900 16some_other_valueget mykeyVALUE mykey 0 16some_other_valueEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。
append 命令的基本语法格式如下:
append key flags exptime bytes [noreply]value
参数说明如下:
实例如下:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 14memcachedENDappend 51coolma 0 900 5redisSTOREDget 51coolmaVALUE 51coolma 0 14memcachedredisEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。
prepend 命令的基本语法格式如下:
prepend key flags exptime bytes [noreply]value
参数说明如下:
实例如下:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 14memcachedENDprepend 51coolma 0 900 5redisSTOREDget 51coolmaVALUE 51coolma 0 14redismemcachedEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作
它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。
检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。
CAS 命令的基本语法格式如下:
cas key flags exptime bytes unique_cas_token [noreply]value
参数说明如下:
要在 Memcached 上使用 CAS 命令,你需要从 Memcached 服务商通过 gets 命令获取令牌(token)。
gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于,gets 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 "版本" 标识符。
实例步骤如下:
cas tp 0 900 9ERROR <− 缺少 tokencas tp 0 900 9 2memcachedNOT_FOUND <− 键 tp 不存在set tp 0 900 9memcachedSTOREDgets tpVALUE tp 0 9 1memcachedENDcas tp 0 900 5 1redisSTOREDget tpVALUE tp 0 5redisEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
get 命令的基本语法格式如下:
get key
多个 key 使用空格隔开,如下:
get key1 key2 key3
参数说明如下:
在以下实例中,我们使用 51coolma 作为 key,过期时间设置为 900 秒。
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedEND
Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。
gets 命令的基本语法格式如下:
gets key
多个 key 使用空格隔开,如下:
gets key1 key2 key3
参数说明如下:
在以下实例中,我们使用 51coolma 作为 key,过期时间设置为 900 秒。
set 51coolma 0 900 9memcachedSTOREDgets 51coolmaVALUE 51coolma 0 9 1memcachedEND
在 使用 gets 命令的输出结果中,在最后一列的数字 1 代表了 key 为 51coolma 的 CAS 令牌。
Memcached delete 命令用于删除已存在的 key(键)。
delete 命令的基本语法格式如下:
delete key [noreply]
多个 key 使用空格隔开,如下:
delete key1 key2 key3
参数说明如下:
在以下实例中,我们使用 51coolma 作为 key,过期时间设置为 900 秒。之后我们使用 delete 命令删除该 key。
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedENDdelete 51coolmaDELETEDget 51coolmaENDdelete 51coolmaNOT_FOUND
输出信息说明:
Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。
incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。
如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR。
incr 命令的基本语法格式如下:
incr key increment_value
参数说明如下:
在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行加 5 操作。
set visitors 0 900 210STOREDget visitorsVALUE visitors 0 210ENDincr visitors 515get visitorsVALUE visitors 0 215END
输出信息说明:
decr 命令的基本语法格式如下:
decr key decrement_value
参数说明如下:
set visitors 0 900 210STOREDget visitorsVALUE visitors 0 210ENDdecr visitors 55get visitorsVALUE visitors 0 15END
在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行减 5 操作。
输出信息说明:
Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。
stats 命令的基本语法格式如下:
stats
在以下实例中,我们使用了 stats 命令来输出 Memcached 服务信息。
statsSTAT pid 1162STAT uptime 5022STAT time 1415208270STAT version 1.4.14STAT libevent 2.0.19-stableSTAT pointer_size 64STAT rusage_user 0.096006STAT rusage_system 0.152009STAT curr_connections 5STAT total_connections 6STAT connection_structures 6STAT reserved_fds 20STAT cmd_get 6STAT cmd_set 4STAT cmd_flush 0STAT cmd_touch 0STAT get_hits 4STAT get_misses 2STAT delete_misses 1STAT delete_hits 1STAT incr_misses 2STAT incr_hits 1STAT decr_misses 0STAT decr_hits 1STAT cas_misses 0STAT cas_hits 0STAT cas_badval 0STAT touch_hits 0STAT touch_misses 0STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 262STAT bytes_written 313STAT limit_maxbytes 67108864STAT accepting_conns 1STAT listen_disabled_num 0STAT threads 4STAT conn_yields 0STAT hash_power_level 16STAT hash_bytes 524288STAT hash_is_expanding 0STAT expired_unfetched 1STAT evicted_unfetched 0STAT bytes 142STAT curr_items 2STAT total_items 6STAT evictions 0STAT reclaimed 1END
这里显示了很多状态信息,下边详细解释每个状态项:
Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。
stats items 命令的基本语法格式如下:
stats items
stats itemsSTAT items:1:number 1STAT items:1:age 7STAT items:1:evicted 0STAT items:1:evicted_nonzero 0STAT items:1:evicted_time 0STAT items:1:outofmemory 0STAT items:1:tailrepairs 0STAT items:1:reclaimed 0STAT items:1:expired_unfetched 0STAT items:1:evicted_unfetched 0END
Memcached stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。
stats slabs 命令的基本语法格式如下:
stats slabs
stats slabsSTAT 1:chunk_size 96STAT 1:chunks_per_page 10922STAT 1:total_pages 1STAT 1:total_chunks 10922STAT 1:used_chunks 1STAT 1:free_chunks 10921STAT 1:free_chunks_end 0STAT 1:mem_requested 71STAT 1:get_hits 0STAT 1:cmd_set 1STAT 1:delete_hits 0STAT 1:incr_hits 0STAT 1:decr_hits 0STAT 1:cas_hits 0STAT 1:cas_badval 0STAT 1:touch_hits 0STAT active_slabs 1STAT total_malloced 1048512END
Memcached stats sizes 命令用于显示所有item的大小和个数。
该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。
stats sizes 命令的基本语法格式如下:
stats sizes
stats sizesSTAT 96 1END
Memcached flush_all 命令用于用于清理缓存中的所有 key=>value(键=>值) 对。
该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。
flush_all 命令的基本语法格式如下:
flush_all [time] [noreply]
清理缓存:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedENDflush_allOKget 51coolmaEND
使用 Java 程序连接 Memcached,需要在你的 classpath 中添加 Memcached jar 包。
以下程序假定 Memcached 服务的主机为 127.0.0.1,端口为 11211。
Java 连接 Memcached
import net.spy.memcached.MemcachedClient;import java.net.*;public class MemcachedJava { public static void main(String[] args) { try{ // 本地连接 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println( ex.getMessage() ); } }}
该程序中我们使用 InetSocketAddress 连接 IP 为 127.0.0.1 端口 为 11211 的 memcached 服务。
执行以上代码,如果连接成功会输出以下信息:
Connection to server successful.
以下使用 java.util.concurrent.Future 来存储数据
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 存储数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 查看存储状态 System.out.println("set status:" + fo.get()); // 输出值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println( ex.getMessage() ); } }}
执行程序,输出结果为:
Connection to server successful.set status:trueW3Cschool value in cache - Free Education
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 打印状态 System.out.println("set status:" + fo.get()); // 输出 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 添加 Future fo = mcc.add("51coolma", 900, "memcached"); // 打印状态 System.out.println("add status:" + fo.get()); // 添加新key fo = mcc.add("codingground", 900, "All Free Compilers"); // 打印状态 System.out.println("add status:" + fo.get()); // 输出 System.out.println("codingground value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println(ex.getMessage()); } }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try { //连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加第一个 key=》value 对 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 add 方法后的状态 System.out.println("add status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 添加新的 key fo = mcc.replace("51coolma", 900, "Largest Tutorials' Library"); // 输出执行 set 方法后的状态 System.out.println("replace status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println( ex.getMessage() ); } }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 对存在的key进行数据添加操作 Future fo = mcc.append("51coolma", 900, " for All"); // 输出执行 set 方法后的状态 System.out.println("append status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Education for All"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 对存在的key进行数据添加操作 Future fo = mcc.prepend("51coolma", 900, "Free "); // 输出执行 set 方法后的状态 System.out.println("prepend status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.CASValue;import net.spy.memcached.CASResponse;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 使用 get 方法获取数据 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 通过 gets 方法获取 CAS token(令牌) CASValue casValue = mcc.gets("51coolma"); // 输出 CAS token(令牌) 值 System.out.println("CAS token - " + casValue); // 尝试使用cas方法来更新数据 CASResponse casresp = mcc.cas("51coolma", casValue.getCas(), 900, "Largest Tutorials-Library"); // 输出 CAS 响应信息 System.out.println("CAS Response - " + casresp); // 输出值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 使用 get 方法获取数据 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.CASValue;import net.spy.memcached.CASResponse;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 从缓存中获取键为 W3Cschool 的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 通过 gets 方法获取 CAS token(令牌) CASValue casValue = mcc.gets("51coolma"); // 输出 CAS token(令牌) 值 System.out.println("CAS value in cache - " + casValue); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "World's largest online tutorials library"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 对存在的key进行数据添加操作 Future fo = mcc.delete("51coolma"); // 输出执行 delete 方法后的状态 System.out.println("delete status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数字值 Future fo = mcc.set("number", 900, "1000"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("value in cache - " + mcc.get("number")); // 自增并输出 System.out.println("value in cache after increment - " + mcc.incr("number", 111)); // 自减并输出 System.out.println("value in cache after decrement - " + mcc.decr("number", 112)); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
在前面章节中我们已经介绍了如何安装 Memcached 服务,接下来我们为大家介绍 PHP 如何使用 Memcached 服务。
PHP Memcache 扩展包下载地址:http://pecl.php.net/package/memcache,你可以下载最新稳定包(stable)。
wget http://pecl.php.net/get/memcache-2.2.7.tgz tar -zxvf memcache-2.2.7.tgzcd memcache-2.2.7/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmake && make install
如果你是 PHP7 版本,则需要下载指定分支:
git clone -b php7 https://github.com/php-memcached-dev/php-memcached.git如果你的系统还未编译 libmemcached,则下载编译它:https://launchpad.net/libmemcached/+download
注意:/usr/local/php/ 为php的安装路径,需要根据你安装的实际目录调整。
安装成功后会显示你的memcache.so扩展的位置,比如我的:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
最后我们需要把这个扩展添加到php中,打开你的php.ini文件在最后添加以下内容:
[Memcache]extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"extension = memcache.so
添加完后 重新启动php,我使用的是nginx+php-fpm进程所以命令如下:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
如果是apache的使用以下命令:
/usr/local/apache2/bin/apachectl restart
检查安装结果
/usr/local/php/bin/php -m | grep memcache
安装成功会输出:memcache。
或者通过浏览器访问 phpinfo() 函数来查看,如下图:
<?php$memcache = new Memcache; //创建一个memcache对象$memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器$memcache->set('key', 'test'); //设置一个变量到内存中,名称是key 值是test$get_value = $memcache->get('key'); //从内存中取出key的值echo $get_value;?>
Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。
Linux系统安装memcached,首先要先安装libevent库。
sudo apt-get install libevent libevent-deve 自动下载安装(Ubuntu/Debian)yum install libevent libevent-deve 自动下载安装(Redhat/Fedora/Centos)
Ubuntu/Debian
sudo apt-get install memcached
Redhat/Fedora/Centos
yum install memcached
FreeBSD
portmaster databases/memcached
从其官方网站(http://memcached.org)下载memcached最新版本。
wget http://memcached.org/latest 下载最新版本tar -zxvf memcached-1.x.x.tar.gz 解压源码cd memcached-1.x.x 进入目录./configure --prefix=/usr/local/memcached 配置make && make test 编译sudo make install 安装
Memcached命令的运行:
$ /usr/local/memcached/bin/memcached -h 命令帮助
注意:如果使用自动安装 memcached 命令位于 /usr/local/bin/memcached。
启动选项:
从终端输入以下命令,启动memcached:
/usr/local/memcached/bin/memcached -p 11211 -m 64m -vvslab class 1: chunk size 88 perslab 11915slab class 2: chunk size 112 perslab 9362slab class 3: chunk size 144 perslab 7281中间省略slab class 38: chunk size 391224 perslab 2slab class 39: chunk size 489032 perslab 2<23 server listening<24 send buffer was 110592, now 268435456<24 server listening (udp)<24 server listening (udp)<24 server listening (udp)<24 server listening (udp)
这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211,最大内存使用量为64M。调试信息的内容大部分是关于存储的信息。
# /usr/local/memcached/bin/memcached -p 11211 -m 64m -d
或者
/usr/local/memcached/bin/memcached -d -m 64M -u root -l 192.168.0.200 -p 11211 -c 256 -P /tmp/memcached.pid
我们可以通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务。
telnet HOST PORT
命令中的 HOST 和 PORT 为运行 Memcached 服务的 IP 和 端口。
以下实例演示了如何连接到 Memcached 服务并执行简单的 set 和 get 命令。
本实例的 Memcached 服务运行的主机为 127.0.0.1(本机) 、端口为 11211。
telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.set foo 0 0 3 保存命令bar 数据STORED 结果get foo 取得命令VALUE foo 0 3 数据bar 数据END 结束行quit 退出
Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
set 命令的基本语法格式如下:
set key flags exptime bytes [noreply] value
参数说明如下:
以下实例中我们设置:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedEND
如果数据设置成功,则输出:
STORED
输出信息说明:
Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。
add 命令的基本语法格式如下:
add key flags exptime bytes [noreply]value
参数说明如下:
以下实例中我们设置:
add new_key 0 900 10data_valueSTOREDget new_keyVALUE new_key 0 10data_valueEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
replace 命令的基本语法格式如下:
replace key flags exptime bytes [noreply]value
参数说明如下:
以下实例中我们设置:
以下实例中我们使用的键位 'mykey' 并存储对应的值 data_value。执行后我们替换相同的 key 的值为 'some_other_value'。
add mykey 0 900 10data_valueSTOREDget mykeyVALUE mykey 0 10data_valueENDreplace mykey 0 900 16some_other_valueget mykeyVALUE mykey 0 16some_other_valueEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。
append 命令的基本语法格式如下:
append key flags exptime bytes [noreply]value
参数说明如下:
实例如下:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 14memcachedENDappend 51coolma 0 900 5redisSTOREDget 51coolmaVALUE 51coolma 0 14memcachedredisEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。
prepend 命令的基本语法格式如下:
prepend key flags exptime bytes [noreply]value
参数说明如下:
实例如下:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 14memcachedENDprepend 51coolma 0 900 5redisSTOREDget 51coolmaVALUE 51coolma 0 14redismemcachedEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作
它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。
检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。
CAS 命令的基本语法格式如下:
cas key flags exptime bytes unique_cas_token [noreply]value
参数说明如下:
要在 Memcached 上使用 CAS 命令,你需要从 Memcached 服务商通过 gets 命令获取令牌(token)。
gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于,gets 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 "版本" 标识符。
实例步骤如下:
cas tp 0 900 9ERROR <− 缺少 tokencas tp 0 900 9 2memcachedNOT_FOUND <− 键 tp 不存在set tp 0 900 9memcachedSTOREDgets tpVALUE tp 0 9 1memcachedENDcas tp 0 900 5 1redisSTOREDget tpVALUE tp 0 5redisEND
如果数据添加成功,则输出:
STORED
输出信息说明:
Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
get 命令的基本语法格式如下:
get key
多个 key 使用空格隔开,如下:
get key1 key2 key3
参数说明如下:
在以下实例中,我们使用 51coolma 作为 key,过期时间设置为 900 秒。
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedEND
Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。
gets 命令的基本语法格式如下:
gets key
多个 key 使用空格隔开,如下:
gets key1 key2 key3
参数说明如下:
在以下实例中,我们使用 51coolma 作为 key,过期时间设置为 900 秒。
set 51coolma 0 900 9memcachedSTOREDgets 51coolmaVALUE 51coolma 0 9 1memcachedEND
在 使用 gets 命令的输出结果中,在最后一列的数字 1 代表了 key 为 51coolma 的 CAS 令牌。
Memcached delete 命令用于删除已存在的 key(键)。
delete 命令的基本语法格式如下:
delete key [noreply]
多个 key 使用空格隔开,如下:
delete key1 key2 key3
参数说明如下:
在以下实例中,我们使用 51coolma 作为 key,过期时间设置为 900 秒。之后我们使用 delete 命令删除该 key。
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedENDdelete 51coolmaDELETEDget 51coolmaENDdelete 51coolmaNOT_FOUND
输出信息说明:
Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。
incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。
如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR。
incr 命令的基本语法格式如下:
incr key increment_value
参数说明如下:
在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行加 5 操作。
set visitors 0 900 210STOREDget visitorsVALUE visitors 0 210ENDincr visitors 515get visitorsVALUE visitors 0 215END
输出信息说明:
decr 命令的基本语法格式如下:
decr key decrement_value
参数说明如下:
set visitors 0 900 210STOREDget visitorsVALUE visitors 0 210ENDdecr visitors 55get visitorsVALUE visitors 0 15END
在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行减 5 操作。
输出信息说明:
Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。
stats 命令的基本语法格式如下:
stats
在以下实例中,我们使用了 stats 命令来输出 Memcached 服务信息。
statsSTAT pid 1162STAT uptime 5022STAT time 1415208270STAT version 1.4.14STAT libevent 2.0.19-stableSTAT pointer_size 64STAT rusage_user 0.096006STAT rusage_system 0.152009STAT curr_connections 5STAT total_connections 6STAT connection_structures 6STAT reserved_fds 20STAT cmd_get 6STAT cmd_set 4STAT cmd_flush 0STAT cmd_touch 0STAT get_hits 4STAT get_misses 2STAT delete_misses 1STAT delete_hits 1STAT incr_misses 2STAT incr_hits 1STAT decr_misses 0STAT decr_hits 1STAT cas_misses 0STAT cas_hits 0STAT cas_badval 0STAT touch_hits 0STAT touch_misses 0STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 262STAT bytes_written 313STAT limit_maxbytes 67108864STAT accepting_conns 1STAT listen_disabled_num 0STAT threads 4STAT conn_yields 0STAT hash_power_level 16STAT hash_bytes 524288STAT hash_is_expanding 0STAT expired_unfetched 1STAT evicted_unfetched 0STAT bytes 142STAT curr_items 2STAT total_items 6STAT evictions 0STAT reclaimed 1END
这里显示了很多状态信息,下边详细解释每个状态项:
Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。
stats items 命令的基本语法格式如下:
stats items
stats itemsSTAT items:1:number 1STAT items:1:age 7STAT items:1:evicted 0STAT items:1:evicted_nonzero 0STAT items:1:evicted_time 0STAT items:1:outofmemory 0STAT items:1:tailrepairs 0STAT items:1:reclaimed 0STAT items:1:expired_unfetched 0STAT items:1:evicted_unfetched 0END
Memcached stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。
stats slabs 命令的基本语法格式如下:
stats slabs
stats slabsSTAT 1:chunk_size 96STAT 1:chunks_per_page 10922STAT 1:total_pages 1STAT 1:total_chunks 10922STAT 1:used_chunks 1STAT 1:free_chunks 10921STAT 1:free_chunks_end 0STAT 1:mem_requested 71STAT 1:get_hits 0STAT 1:cmd_set 1STAT 1:delete_hits 0STAT 1:incr_hits 0STAT 1:decr_hits 0STAT 1:cas_hits 0STAT 1:cas_badval 0STAT 1:touch_hits 0STAT active_slabs 1STAT total_malloced 1048512END
Memcached stats sizes 命令用于显示所有item的大小和个数。
该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。
stats sizes 命令的基本语法格式如下:
stats sizes
stats sizesSTAT 96 1END
Memcached flush_all 命令用于用于清理缓存中的所有 key=>value(键=>值) 对。
该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。
flush_all 命令的基本语法格式如下:
flush_all [time] [noreply]
清理缓存:
set 51coolma 0 900 9memcachedSTOREDget 51coolmaVALUE 51coolma 0 9memcachedENDflush_allOKget 51coolmaEND
使用 Java 程序连接 Memcached,需要在你的 classpath 中添加 Memcached jar 包。
以下程序假定 Memcached 服务的主机为 127.0.0.1,端口为 11211。
Java 连接 Memcached
import net.spy.memcached.MemcachedClient;import java.net.*;public class MemcachedJava { public static void main(String[] args) { try{ // 本地连接 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println( ex.getMessage() ); } }}
该程序中我们使用 InetSocketAddress 连接 IP 为 127.0.0.1 端口 为 11211 的 memcached 服务。
执行以上代码,如果连接成功会输出以下信息:
Connection to server successful.
以下使用 java.util.concurrent.Future 来存储数据
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 存储数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 查看存储状态 System.out.println("set status:" + fo.get()); // 输出值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println( ex.getMessage() ); } }}
执行程序,输出结果为:
Connection to server successful.set status:trueW3Cschool value in cache - Free Education
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 打印状态 System.out.println("set status:" + fo.get()); // 输出 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 添加 Future fo = mcc.add("51coolma", 900, "memcached"); // 打印状态 System.out.println("add status:" + fo.get()); // 添加新key fo = mcc.add("codingground", 900, "All Free Compilers"); // 打印状态 System.out.println("add status:" + fo.get()); // 输出 System.out.println("codingground value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println(ex.getMessage()); } }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try { //连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加第一个 key=》value 对 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 add 方法后的状态 System.out.println("add status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 添加新的 key fo = mcc.replace("51coolma", 900, "Largest Tutorials' Library"); // 输出执行 set 方法后的状态 System.out.println("replace status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex){ System.out.println( ex.getMessage() ); } }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 对存在的key进行数据添加操作 Future fo = mcc.append("51coolma", 900, " for All"); // 输出执行 set 方法后的状态 System.out.println("append status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Education for All"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 对存在的key进行数据添加操作 Future fo = mcc.prepend("51coolma", 900, "Free "); // 输出执行 set 方法后的状态 System.out.println("prepend status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.CASValue;import net.spy.memcached.CASResponse;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 使用 get 方法获取数据 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 通过 gets 方法获取 CAS token(令牌) CASValue casValue = mcc.gets("51coolma"); // 输出 CAS token(令牌) 值 System.out.println("CAS token - " + casValue); // 尝试使用cas方法来更新数据 CASResponse casresp = mcc.cas("51coolma", casValue.getCas(), 900, "Largest Tutorials-Library"); // 输出 CAS 响应信息 System.out.println("CAS Response - " + casresp); // 输出值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 使用 get 方法获取数据 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.CASValue;import net.spy.memcached.CASResponse;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "Free Education"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 从缓存中获取键为 W3Cschool 的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 通过 gets 方法获取 CAS token(令牌) CASValue casValue = mcc.gets("51coolma"); // 输出 CAS token(令牌) 值 System.out.println("CAS value in cache - " + casValue); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("51coolma", 900, "World's largest online tutorials library"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("51coolma")); // 对存在的key进行数据添加操作 Future fo = mcc.delete("51coolma"); // 输出执行 delete 方法后的状态 System.out.println("delete status:" + fo.get()); // 获取键对应的值 System.out.println("51coolma value in cache - " + mcc.get("codingground")); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
import java.net.InetSocketAddress;import java.util.concurrent.Future;import net.spy.memcached.MemcachedClient;public class MemcachedJava { public static void main(String[] args) { try{ // 连接本地的 Memcached 服务 MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("Connection to server sucessful."); // 添加数字值 Future fo = mcc.set("number", 900, "1000"); // 输出执行 set 方法后的状态 System.out.println("set status:" + fo.get()); // 获取键对应的值 System.out.println("value in cache - " + mcc.get("number")); // 自增并输出 System.out.println("value in cache after increment - " + mcc.incr("number", 111)); // 自减并输出 System.out.println("value in cache after decrement - " + mcc.decr("number", 112)); // 关闭连接 mcc.shutdown(); }catch(Exception ex) System.out.println(ex.getMessage()); }}
在前面章节中我们已经介绍了如何安装 Memcached 服务,接下来我们为大家介绍 PHP 如何使用 Memcached 服务。
PHP Memcache 扩展包下载地址:http://pecl.php.net/package/memcache,你可以下载最新稳定包(stable)。
wget http://pecl.php.net/get/memcache-2.2.7.tgz tar -zxvf memcache-2.2.7.tgzcd memcache-2.2.7/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmake && make install
如果你是 PHP7 版本,则需要下载指定分支:
git clone -b php7 https://github.com/php-memcached-dev/php-memcached.git如果你的系统还未编译 libmemcached,则下载编译它:https://launchpad.net/libmemcached/+download
注意:/usr/local/php/ 为php的安装路径,需要根据你安装的实际目录调整。
安装成功后会显示你的memcache.so扩展的位置,比如我的:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
最后我们需要把这个扩展添加到php中,打开你的php.ini文件在最后添加以下内容:
[Memcache]extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"extension = memcache.so
添加完后 重新启动php,我使用的是nginx+php-fpm进程所以命令如下:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
如果是apache的使用以下命令:
/usr/local/apache2/bin/apachectl restart
检查安装结果
/usr/local/php/bin/php -m | grep memcache
安装成功会输出:memcache。
或者通过浏览器访问 phpinfo() 函数来查看,如下图:
<?php$memcache = new Memcache; //创建一个memcache对象$memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器$memcache->set('key', 'test'); //设置一个变量到内存中,名称是key 值是test$get_value = $memcache->get('key'); //从内存中取出key的值echo $get_value;?>