1.下载memcached的windows版本,地址在http://code.jellycan.com/memcached/
2.解压到任意目录,然后用管理员身份cd到你的解压目录
3.memcached.exe -d install
4.memcached.exe -d start
memcached安装完成。
https://github.com/gwhalin/Memcached-Java-Client/downloads
java_memcached-release_2.5.0.zip为java的连接客户端
1.解压,将里面的jar包拷贝到项目的lib目录下
使用以下代码调用
package info.frady; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; /** * Oct 15, 2011 */ public class MemCachedTest { private static MemCachedClient mcc = new MemCachedClient(); static { String[] servers = {"127.0.0.1:11211"}; //创建一个连接池 SockIOPool pool = SockIOPool.getInstance(); //设置缓存服务器 pool.setServers(servers); //设置初始化连接数,最小连接数,最大连接数以及最大处理时间 pool.setInitConn(50); pool.setMinConn(50); pool.setMaxConn(500); pool.setMaxIdle(1000 * 60 * 60); //设置主线程睡眠时间,每3秒苏醒一次,维持连接池大小 //maintSleep 千万不要设置成30,访问量一大就出问题,单位是毫秒,推荐30000毫秒。 pool.setMaintSleep(3000); //关闭套接字缓存 pool.setNagle(false); //连接建立后的超时时间 pool.setSocketTO(3000); //连接建立时的超时时间 pool.setSocketConnectTO(0); //初始化连接池 pool.initialize(); } protected MemCachedTest(){ } public static MemCachedClient getInstance(){ return mcc; } public static void main(String[] args) { MemCachedClient cache = MemCachedTest.getInstance(); cache.add("frady", "this is a test"); System.out.println(cache.get("frady")); } }
以下是对象的封装
package info.frady; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; /** * Oct 15, 2011 */ public class MemTest { // 创建一个 memcached 客户端对象 protected static MemCachedClient mcc = new MemCachedClient(); // 创建 memcached连接池 static { // 指定memcached服务地址 String[] servers = { "127.0.0.1:11211","127.0.0.1:11211", "127.0.0.1:11211" }; // 指定memcached服务器负载量 Integer[] weights ={ 3, 3, 2 }; // 从连接池获取一个连接实例 SockIOPool pool = SockIOPool.getInstance(); // 设置服务器和服务器负载量 pool.setServers( servers ); pool.setWeights( weights ); // 设置一些基本的参数 //设置初始连接数5 最小连接数 5 最大连接数 250 //设置一个连接最大空闲时间6小时 pool.setInitConn( 5 ); pool.setMinConn( 5 ); pool.setMaxConn( 250 ); pool.setMaxIdle( 1000 * 60 * 60 * 6 ); // 设置主线程睡眠时间 // 每隔30秒醒来 然后 // 开始维护 连接数大小 pool.setMaintSleep( 30 ); // 设置tcp 相关的树形 // 关闭nagle算法 // 设置 读取 超时3秒钟 set the read timeout to 3 secs // 不设置连接超时 pool.setNagle( false ); pool.setSocketTO( 3000 ); pool.setSocketConnectTO( 0 ); // 开始初始化 连接池 pool.initialize(); // 设置压缩模式 //如果超过64k压缩数据 mcc.setCompressEnable( true ); mcc.setCompressThreshold( 64 * 1024 ); } public static void main(String args[]) { User u1 = new User(); u1.setUserName("frady"); u1.setEmail("weimengiq@126.com"); mcc.add("fradyt", u1); User u2 = (User) mcc.get("fradyt"); System.out.println("email=" + u2.getEmail()); u2.setEmail("weimengiq@gmail.com"); mcc.replace("fradyt", u2); u2 = (User) mcc.get("fradyt"); System.out.println("email=" + u2.getEmail()); } }
此处要注意User得实现序列化
package info.frady; import java.io.Serializable; /** * Oct 15, 2011 */ public class User implements Serializable { /** * */ private static final long serialVersionUID = 1003272426055966138L; private String userName; private String email; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
查看cache的状态
Map <String, Map<String, String>> stats = cache.stats(); for (Map.Entry<String, Map<String, String>> m : stats.entrySet()) { System.out.println(m.getKey()); Map<String, String> values=m.getValue(); for (Map.Entry<String, String> v : values.entrySet()) { System.out.print(v.getKey()+":"); System.out.println(v.getValue()); } }
清空所有的对象
MemCachedClient mc = new MemCachedClient(); mc.flushAll();
据说2.5有连接数量过多导致oom的bug,附件提供了2.6.1版本的包。
官方地址:https://github.com/gwhalin/Memcached-Java-Client/downloads