memcache是c语言编写的内存缓存,常见同php协同应用,支持多种语言。对于java web有三种常用的client
Memcached客户端程序
Memcached的java客户端已经存在三种了:
官方提供的基于传统阻塞io由Greg Whalin维护的客户端
Dustin Sallings实现的基于java nio的Spymemcached
XMemcached
1. 三种API比较
1)memcached client for java
较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。
2)spymemcached
A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。
3)xmemcached
XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。
2. 建议
由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。
XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的集成、客户端连接池、可扩展性好等。
参考:http://blog.163.com/sir_876/blog/static/11705223201211354346520/
服务器端配置简单,安装过程:
1. 安装第三方软件库
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.rf.src.rpm
rpm -ivh rpmforge-release-0.5.2-2.rf.src.rpm
2. 查找Memcached
yum search memcached
3. 安装Memcached
yum -y install memcached
4. 验证安装
memcached -h
应该会输出一些帮助信息
5. 将memcache加入启动列表
chkconfig –level 2345 memcached on
6. 配置Memcache
vi /etc/sysconfig/memcached
文件中内容如下
PORT=”11211″ 端口
USER=”root” 使用的用户名
MAXCONN=”1024″ 同时最大连接数
CACHESIZE=”64″ 使用的内存大小
OPTIONS=”" 附加参数
7. 查看memcache状态
memcached-tool [Memcache Server IP]:[Memcache Server Port] stats
如:memcached-tool 127.0.0.1:11211 stats
3.memcached 监控:
可以借助php页面实现图形监控
也可以使用 telnet命令监控
[root@PictureRecognition php]# whereis memcached
memcached: /usr/local/bin/memcached
[root@PictureRecognition php]# /usr/local/bin/memcached -p 11211 -m 1024m -d
can't run as root without the -u switch
[root@PictureRecognition php]# /usr/local/bin/memcached -uroot -p 11211 -m 1024m -d
[root@PictureRecognition php]# ps -aux |grep mem
[root@PictureRecognition php]# telnet localhost 11211
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
status
ERROR
stats
STAT pid 11044
STAT uptime 2390
STAT time 1455781569
STAT version 1.2.0
STAT pointer_size 64
STAT rusage_user 0.076988
STAT rusage_system 0.709892
STAT curr_items 417
STAT total_items 600
STAT bytes 4031296
STAT curr_connections 12
STAT total_connections 15
STAT connection_structures 13
STAT cmd_get 2229
STAT cmd_set 600
STAT get_hits 1631
STAT get_misses 598
STAT bytes_read 4265823
STAT bytes_written 15212607
STAT limit_maxbytes 1073741824
END
memcache支持分布式,但各个节点不进行通信,负载均衡策略在应用中建立