Windows系统下memcache的安装
cmd进入到memcache目录下(win10需要以管理员身份运行cmd)
memcache.exe -d install
memcache.exe -d start
启动memcache服务后可以在windows服务中看到名称为memcache 的服务
Java使用memcache
项目目录如下
User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public class User implements Serializable{ private static final long serialVersionUID = 1L; private String username; private String password; //省略构造函数级getter setter @Override public int hashCode() { final int prime = 31 ; int result = 1 ; result = prime * result + ((password == null ) ? 0 : password.hashCode()); result = prime * result + ((username == null ) ? 0 : username.hashCode()); return result; } @Override public boolean equals(Object obj) { if ( this == obj) return true ; if (obj == null ) return false ; if (getClass() != obj.getClass()) return false ; User other = (User) obj; if (password == null ) { if (other.password != null ) return false ; } else if (!password.equals(other.password)) return false ; if (username == null ) { if (other.username != null ) return false ; } else if (!username.equals(other.username)) return false ; return true ; } } |
MemcachedUtil.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | public class MemcachedUtil { /** * memcached客户端单例 */ private static MemCachedClient cachedClient = new MemCachedClient(); /** * 初始化连接池 */ static { //获取连接池的实例 SockIOPool pool = SockIOPool.getInstance(); //服务器列表及其权重 String[] servers = { "127.0.0.1:11211" }; Integer[] weights = { 3 }; //设置服务器信息 pool.setServers(servers); pool.setWeights(weights); //设置初始连接数、最小连接数、最大连接数、最大处理时间 pool.setInitConn( 10 ); pool.setMinConn( 10 ); pool.setMaxConn( 1000 ); pool.setMaxIdle( 1000 * 60 * 60 ); //设置连接池守护线程的睡眠时间 pool.setMaintSleep( 60 ); //设置TCP参数,连接超时 pool.setNagle( false ); pool.setSocketTO( 60 ); pool.setSocketConnectTO( 0 ); //初始化并启动连接池 pool.initialize(); //压缩设置,超过指定大小的都压缩 // cachedClient.setCompressEnable(true); // cachedClient.setCompressThreshold(1024*1024); } private MemcachedUtil(){ } public static boolean add(String key, Object value) { return cachedClient.add(key, value); } public static boolean add(String key, Object value, Integer expire) { return cachedClient.add(key, value, expire); } public static boolean put(String key, Object value) { return cachedClient.set(key, value); } public static boolean put(String key, Object value, Integer expire) { return cachedClient.set(key, value, expire); } public static boolean replace(String key, Object value) { return cachedClient.replace(key, value); } public static boolean replace(String key, Object value, Integer expire) { return cachedClient.replace(key, value, expire); } public static Object get(String key) { return cachedClient.get(key); } } |
MemcachedUtilTest.java测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class MemcachedUtilTest { &#64;Test public void testMemcached() { MemcachedUtil.put( "hello" , "world" , 60 ); String hello &#61; (String) MemcachedUtil.get( "hello" ); Assert.assertEquals( "world" , hello); for ( int i &#61; 0 ; i < 10000 ; &#43;&#43;i) { User user &#61; new User( "Jason" &#43; i, "123456-" &#43; i); MemcachedUtil.put( "user" &#43; i, user, 60 ); Object obj &#61; MemcachedUtil.get( "user" &#43; i); Assert.assertEquals(user, obj); } } } |
在Spring中配置并使用memcache
applicationContext.xml配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
xml version &#61; "1.0" encoding &#61; "UTF-8" ?> < beans xmlns &#61; "http://www.springframework.org/schema/beans" xmlns:xsi &#61; "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&#61;"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> < bean id &#61; "memcachedPool" class &#61; "com.danga.MemCached.SockIOPool" factory-method &#61; "getInstance" init-method &#61; "initialize" > < constructor-arg > < value >neeaMemcachedPool value >
constructor-arg > < property name &#61; "servers" > < list > < value >127.0.0.1:11211 value >
list >
property > < property name &#61; "initConn" > < value >20 value >
property > < property name &#61; "minConn" > < value >10 value >
property > < property name &#61; "maxConn" > < value >50 value >
property > < property name &#61; "nagle" > < value >false value >
property > < property name &#61; "socketTO" > < value >3000 value >
property >
bean > < bean id &#61; "memcachedClient" class &#61; "com.danga.MemCached.MemCachedClient" > < constructor-arg > < value >neeaMemcachedPool value >
constructor-arg >
bean >
beans > |
MemcachedSpringTest.java测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class MemcachedSpringTest { private MemCachedClient cachedClient; &#64;Before public void init() { ApplicationContext context &#61; new ClassPathXmlApplicationContext( "applicationContext.xml" ); cachedClient &#61; (MemCachedClient)context.getBean( "memcachedClient" ); } &#64;Test public void testMemcachedSpring() { User user &#61; new User( "lou" , "jason" ); cachedClient.set( "user" , user); User cachedBean &#61; (User)user; Assert.assertEquals(user, cachedBean); } } |
本机测试全部通过&#xff0c;当然如果你打算深入学习的话&#xff0c;最好还是找一些相关的java视频教程来看看。