缓存-memcache

memcache是c语言编写的内存缓存,常见同php协同应用,支持多种语言。对于java web有三种经常使用的clientphp

Memcached客户端程序java

Memcached的java客户端已经存在三种了:web


官方提供的基于传统阻塞io由Greg Whalin维护的客户端shell


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支持分布式,但各个节点不进行通讯,负载均衡策略在应用中创建