一,Windows下的Memcache安装:
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装
3. 再输入: 'c:\memcached\memcached.exe -d start' 启动。NOTE:
以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
magent -u root(启动用户uid) -n 51200(最大连接数) -l 127.0.0.1(ip地址) -p 12000(监听端口) -s 127.0.0.1:11211(memcached的ip) -s 127.0.0.1:11212(memcached的ip) -b 127.0.0.1:11213(备份memcached的ip)
magent -u root -n 5120 -l 127.0.0.1 -p 12000 -s
127.0.0.1:11211 -s 127.0.0.1:11212 -b
127.0.0.1:11213
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
telnet
127.0.0.1 11211 stats
查询状态
quit 退出telnet二,memcache服务器安全:
>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上
2>修改端口,如改为11200
3>分配内存,如分配1024M(1G内存)
方法如下:
1>开始>运行:regedit(回车)
2>在注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached
Server
3>默认的ImagePath键的值是:"c:\memcached\memcached.exe" -d runservice,改为:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55(确定,关闭注册表)
4>我的电脑(右键)>管理>服务 找到memcache的服务,重新启动一次即可生效。
可以使用php写的MemAdmin 来监控memcahce运行状态
三:memcached机制
memcached能接受的key的最大长度是多少?
key 的最大长度是250个字符。需要注意的是,250是memcached服务器端内部的限制,如果您使用的客户端支持”key的前缀”或类似特性,那么 key(前缀+原始key)的最大长度是可以超过250个字符的。我们推荐使用使用较短的key,因为可以节省内存和带宽。
这些状态的说明如下
pid |
memcache服务器的进程ID |
uptime |
服务器已经运行的秒数 |
time |
服务器当前的unix时间戳 |
version |
memcache版本 |
pointer_size |
当前操作系统的指针大小(32位系统一般是32bit) |
rusage_user |
进程的累计用户时间 |
rusage_system |
进程的累计系统时间 |
curr_items |
服务器当前存储的items数量 |
total_items |
从服务器启动以后存储的items总数量 |
bytes |
当前服务器存储items占用的字节数 |
curr_connections |
当前打开着的连接数 |
total_connections |
从服务器启动以后曾经打开过的连接数 |
connection_structures |
服务器分配的连接构造数 |
cmd_get |
get命令(获取)总请求次数 |
cmd_set |
set命令(保存)总请求次数 |
get_hits |
总命中次数 |
get_misses |
总未命中次数 |
evictions |
为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) |
bytes_read |
总读取字节数(请求字节数) |
bytes_written |
总发送字节数(结果字节数) |
limit_maxbytes |
分配给memcache的内存大小(字节) |
threads |
当前线程数 |
Java客户端调用memcached有三种方式:
1.
Java自带的方式
Spring applicationContext.xml中设置
1. <bean id="memcache"
class="com.danga.MemCached.SockIOPool"
2.
factory-method="getInstance" init-method="initialize"
3.
destroy-method="shutDown">
4. <constructor-arg>
5.
<value>memcache</value>
6.
</constructor-arg>
7.
<property name="servers">
8. <list>
9.
<value>${memcache.server}</value>
10. </list>
11.
</property>
12. <property
name="initConn">
13.
<value>${memcache.initConn}</value>
14.
</property>
15. <property
name="minConn">
16.
<value>${memcache.minConn}</value>
17.
</property>
18. <property
name="maxConn">
19.
<value>${memcache.maxConn}</value>
20.
</property>
21. <property
name="maintSleep">
22.
<value>${memcache.maintSleep}</value>
23.
</property>
24. <property
name="nagle">
25. <value>${memcache.nagle}</value>
26.
</property>
27. <property
name="socketTO">
28.
<value>${memcache.socketTO}</value>
29.
</property>
30. </bean>
配置信息
memcache.server=192.168.0.9:11211
memcache.initConn=20
memcache.minConn=10
memcache.maxConn=50
memcache.maintSleep=30
memcache.nagle=false
memcache.socketTO=3000
memcached常用方法:
1、设置数据到内存
memCachedClient.set(key, value, cache中存在时长);
2、删除内存中的数据
memCachedClient.delete(key);
3、取得内存中的数据
memCachedClient.get(key);
2.
Xmemcached方式
java nio的memcached客户端--xmemcached
memcache
1、xmemcached是什么?
基于java nio实现的memcached客户端API
实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/ 的基础上实现的(目前是基于yanf4j
0.54),序列化机制直接挪用spymemcached的Transcoder。
性能方面与spymemcached相比各有优势,spymemcached在windows和linux两个平台上的效率差异很大(特别是容器类 大对象的读写上),而xmemcached就没有这个问题,如果你的get操作远远多于存储操作,那么xmemcached对于get的优化在并发下的效 果更加明显。
当前1.0-beta版本,支持memcached的分布式(余数哈希和一致性哈希算法)。目前已经支持get、set、add、replace、 cas、 append、prepend、批量get/gets、delete、incr、decr、version这几个协议。API为阻塞模型,而非 spymemcached的异步模型,异步模型在批处理的时候有优势,但是阻塞模型在编程难度和使用上会容易很多。
后续计划:1.0 正式稳定版1.1 着重性能优化
2、为什么叫xmemcached?
因为我在厦门(XM)混饭......
3、xmemcached的下载和使用
项目主页:http://code.google.com/p/xmemcached下载地址:http://code.google.com/p/xmemcached/downloads/list
wiki地址:http://code.google.com/p/xmemcached/w/list
下载的压缩包中包括了依赖库、源码和打包后的jar,放到项目的lib目录下即可使用。使用:Java代码
1.
import net.rubyeye.xmemcached.XMemcachedClient;
2.
//XMemcachedClient是线程安全的,可以被多线程使用
3.
XMemcachedClient client= new XMemcachedClient(ip, port);
4.
//存储操作
5.
if (!client.set( "hello" , 0 , "dennis" )){
6.
System.err.println( "set
error" );
7.
}
8.
client.add( "hello" , 0 , "dennis" );
9.
client.replace( "hello" , 0 , "dennis" );
10.
11.
//get操作
12.
String name=(String)client.get( "hello" );
13.
14.
//批量获取
15.
List<String> keys= new ArrayList<String>();
16.
keys.add( "hello" );
17.
keys.add( "test" );
18.
Map<String,Object> map=client.get(keys);
19.
20.
//delete操作
21.
if (!client.delete( "hello" , 1000 )){
22.
System.err.println( "delete
error" );
23.
}
24.
25.
//incr,decr操作
26.
client.incr( "a" , 4 );
27.
client.decr( "a" , 4 );
28.
29.
//查看memcached版本
30.
String version=client.version();
31.
32.
client.shutdown();
33.
xmemcached与spymemcached的对比 :
1、xmemcached比spymemcached有更好的性能表现,在get、set、delete、multi-gets等操作的测试中都远远超过或者接近spymemcached。 xmemcached在win32和linux两个平台上都有极佳的性能表现。
2、xmemcached支持动态地添加或者移除memcached
server,可以通过编程或者JMX来做到。
3、xmemcached支持JMX,可以通过jmx调整性能参数、添加/移除memcached节点、查看统计
4、xmemcached有客户端统计,可以统计xmemcached客户端的各种操作的总次数
5、xmemcached允许调整更多的网络层参数和优化选项.
6、xmemcached暂未支持二进制协议,计划在1.2版本中实现。
7、xmemcached的API模型是同步的,而spymemcached的API模型是异步模型,同步模型对应用编程来说更容易使用和直观。
8、xmemcached的序列化机制,是使用了spymemcached的序列化机制,并做了部分改造。
项目主页:http://code.google.com/p/xmemcached/
Java memcached 客户端——XMemcached 发布1.2.5版本,这是1.2的最后一个小版本,主要的改进如下:
1、合并yanf4j到xmemcached,目前只是简单的源码合并,以及去除了不需要的udp支持。因此从1.2.5开始,xmemcached 不再依赖yanf4j,仅依赖slf4j 。
2、支持SASL验证。memcached 1.4.3新增了SASL授权特性,启用了SASL的memcached会要求客户端进行授权验证,否则将拒绝请求,对于需要验证的用户来说是个可选的特性,关于memcached的SASL支持更多请看这里。Xmemcached 1.2.5开始支持客户端的SASL验证,一个典型的使用例子如下:
Java代码
1.
MemcachedClientBuilder builder = new XMemcachedClientBuilder(
2.
AddrUtil.getAddresses( "localhost:11211" ));
3.
builder.addAuthInfo(AddrUtil.getOneAddress( "localhost:11211" ), AuthInfo
4.
.typical( "cacheuser" , "123456" ));
5.
// Must use binary protocol
6.
builder.setCommandFactory( new BinaryCommandFactory());
7.
MemcachedClient client=builder.build();
3、加快MemcachedClient.shutdown()方法的速度,应用可以更快地关闭xmemcached。
4、完善中文用户指南 ,添加客户端分布和SASL验证两节。
更多信息请参见wiki和changelog
XMemcached是一个基于java
nio的memcached 客户端
项目主页: http://code.google.com/p/xmemcached/
下载地址: http://code.google.com/p/xmemcached/downloads/list
wiki地址:http://code.google.com/p/xmemcached/w/list