什么是memcachedjava
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。web
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。如今已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提升Web应用扩展性的重要因素。数据库
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据能够是数据库调用、API调用或者是页面渲染的结果。windows
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的不少问题。它的API兼容大部分流行的开发语言。缓存
本质上,它是一个简洁的key-value存储系统。服务器
通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。并发
windows下安装memcached异步
32bit:下载 memcached-win32-1.4.4-14.zip(直接下)里面包含6个文件,将解压后的文件夹随便放在什么位置(例如:D:\memcached)。
memcached-win32-1.4.4-14.zip下载页面:http://blog.couchbase.com/memcached-144-windows-32-bit-binary-now-available async
好比:
cd D:\memcached
注意:若是不以管理员身份运行,将获得报错“failed to install service or service already installed”
maven
d:\memcached memcached.exe -d install
(以后屏幕无任何提示,能够再[控制面板]->[管理工具]->[服务]中查看到memcached)
d:\memcached> memcached.exe -d start
以后屏幕无任何提示,可是在“任务管理器”中勾选“显示全部用户进程”,此时能够看到memcached.exe进程正在运行
默认端口11211,外部访问须要开放该端口,不然没法成功链接。
[控制面板]->[管理工具]->[服务] 找到 memcached 服务,双击它打开以下图
启动类型:选择【自动】
服务状态:点击下面的【启动】
备注:可执行文件的路径和我上面所说的路径有些区别能够忽略
-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 显示帮助
设置参数时须要先中止memcached,而后用命令行设置,好比:
D:\memcached> memcached.exe -m 1 -d start
D:\memcached> memcached.exe -d stop
D:\memcached> memcached.exe -d uninstall
windows下须要经过修改注册表信息进行设置,打开注册表,找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached
在其中有一个“ImagePath”项,值为:
"D:\memcached\memcached.exe" -d runservice
在后面加上“-m 1024 -c 2048 -p 11210”。等便可。重启服务后生效
经过java语言操做memcached
三种API的比较
(1)较早推出的memcached JAVA客户端API,应用普遍,运行比较稳定。
(2)A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,可是稳定性很差,测试中常 报timeOut等相关异常。
(3)XMemcached一样是基于java nio的客户端,java nio相比于传统阻塞io模型来讲,有效率高(特别在高并发下)和资源耗费相对较少的优势。传统阻塞IO为了提升效率,须要建立必定数量的链接造成链接 池,而nio仅须要一个链接便可(固然,nio也是能够作池化处理),相对来讲减小了线程建立和切换的开销,这一点在高并发下特别明显。所以 XMemcached与Spymemcached在性能都很是优秀,在某些方面(存储的数据比较小的状况下)Xmemcached比 Spymemcached的表现更为优秀,具体能够看这个Java Memcached Clients Benchmark。
使用XMemcached的示例代码
1. 添加maven依赖
<dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>2.4.0</version> </dependency>
2. 示例代码
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211"); MemcachedClient client = memcachedClientBuilder.build(); //存入一个字符串,第一个参数为key,第二个参数为过时时间,单位为秒,0表明一个月 //第三个参数为具体的值 client.add("stringKey",0,"这是个人字符串"); //从memcached服务器中根据一个键获取一个字符串值 String s = client.get("stringKey"); System.out.println(s); //存入一个List集合 List list = new ArrayList(); list.add("aa"); list.add("bb"); client.add("list",0,list); //根据key获取一个list list = client.get("list"); System.out.println(list); //存入一个对象,若是须要存入一个对象,该对象必须是可序列化的 //java中经过实现接口java.io.Serializable 来表明该类可序列化 // class Student implements java.io.Serializable Student stu = new Student(); stu.setId(12); stu.setName("张三"); client.add("obj",0,stu); System.out.println(client.get("obj"));