阅读本文的前提是,你已经安装或者使用了MemCached,或具有相关的基本知识。
今天要介绍的是Simple-Spring-Memcached,它封装了对MemCached的调用,使MemCached的客户端开发变得超乎寻常的简单,只要一行代码就行:
@ReadThroughAssignCache(assignedKey = "VETS", expiration = 300, namespace = "NELZ")
是不是很神奇?这行代码指定了MemCached的key,过期时间和命名空间。假设你的MemCached服务器IP是:196.168.10.101,端口是:12000,那么在数据调用的配置文件中只要加上下面配置代码就可以了:
1 < import resource ="classpath:simplesm-context.xml" />
2
3
4
5 < bean id ="memcachedConnectionBean" class ="net.nelz.simplesm.config.MemcachedConnectionBean" >
6
7 < property name ="consistentHashing" value ="true" />
8
9 < property name ="nodeList" value ="196.168.10.101:12000" />
10
11 </ bean >
从simplesm-context.xml的内容中,可以看出它所封装的类和方法:
1 < bean id ="memcachedClientFactory" class ="net.nelz.simplesm.config.MemcachedClientFactory" >
2
3 < property name ="bean" ref ="memcachedConnectionBean" />
4
5 </ bean >
6
7
8
9 < bean id ="memcachedClient" factory-bean ="memcachedClientFactory" factory-method ="createMemcachedClient" />
10
11
12
13 < bean id ="methodStore" class ="net.nelz.simplesm.aop.CacheKeyMethodStoreImpl" />
14
15
16
17 < bean id ="net.nelz.simplesm.DefaultKeyProvider" class ="net.nelz.simplesm.impl.DefaultKeyProvider" >
18
19 < property name ="methodStore" ref ="methodStore" />
20
21 </ bean >
22
23
24
25 < bean id ="readThroughSingleCache" class ="net.nelz.simplesm.aop.ReadThroughSingleCacheAdvice" >
26
27 < property name ="cache" ref ="memcachedClient" />
28
29 < property name ="methodStore" ref ="methodStore" />
30
31 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
32
33 </ bean >
34
35 < bean id ="readThroughMultiCache" class ="net.nelz.simplesm.aop.ReadThroughMultiCacheAdvice" >
36
37 < property name ="cache" ref ="memcachedClient" />
38
39 < property name ="methodStore" ref ="methodStore" />
40
41 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
42
43 </ bean >
44
45 < bean id ="readThroughAssignCache" class ="net.nelz.simplesm.aop.ReadThroughAssignCacheAdvice" >
46
47 < property name ="cache" ref ="memcachedClient" />
48
49 < property name ="methodStore" ref ="methodStore" />
50
51 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
52
53 </ bean >
54
55 < bean id ="updateSingleCache" class ="net.nelz.simplesm.aop.UpdateSingleCacheAdvice" >
56
57 < property name ="cache" ref ="memcachedClient" />
58
59 < property name ="methodStore" ref ="methodStore" />
60
61 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
62
63 </ bean >
64
65 < bean id ="updateMultiCache" class ="net.nelz.simplesm.aop.UpdateMultiCacheAdvice" >
66
67 < property name ="cache" ref ="memcachedClient" />
68
69 < property name ="methodStore" ref ="methodStore" />
70
71 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
72
73 </ bean >
74
75 < bean id ="updateAssignCache" class ="net.nelz.simplesm.aop.UpdateAssignCacheAdvice" >
76
77 < property name ="cache" ref ="memcachedClient" />
78
79 < property name ="methodStore" ref ="methodStore" />
80
81 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
82
83 </ bean >
84
85 < bean id ="invalidateSingleCache" class ="net.nelz.simplesm.aop.InvalidateSingleCacheAdvice" >
86
87 < property name ="cache" ref ="memcachedClient" />
88
89 < property name ="methodStore" ref ="methodStore" />
90
91 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
92
93 </ bean >
94
95 < bean id ="invalidateMultiCache" class ="net.nelz.simplesm.aop.InvalidateMultiCacheAdvice" >
96
97 < property name ="cache" ref ="memcachedClient" />
98
99 < property name ="methodStore" ref ="methodStore" />
100
101 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
102
103 </ bean >
104
105 < bean id ="invalidateAssignCache" class ="net.nelz.simplesm.aop.InvalidateAssignCacheAdvice" >
106
107 < property name ="cache" ref ="memcachedClient" />
108
109 < property name ="methodStore" ref ="methodStore" />
110
111 < property name ="defaultKeyProvider" ref ="net.nelz.simplesm.DefaultKeyProvider" />
112
113 </ bean >
114
115
Simple-Spring-Memcached还提供了一个例子,在spring的petClinic例子中加入了几行代码,就实现了对MemCached的调用:
1 import net.nelz.simplesm.annotations.ReadThroughAssignCache;
2
3 import net.nelz.simplesm.annotations.ReadThroughSingleCache;
4
5 @ReadThroughAssignCache(assignedKey = " VETS " , expiration = 300 , namespace = " NELZ " )
6
7 public Collection < Vet > getVets() {
8
9 System.out.println( " \n ! ! !Gonna wait a bit: " + new Date() + " \n " );
10
11 try {
12
13 Thread.sleep( 4000 );
14
15 } catch (Exception ex) {}
16
17 return sessionFactory.getCurrentSession().createQuery( " from Vet vet order by vet.lastName, vet.firstName " ).list();
18
19 }
20
21
为了加强测试的效果,在第一次读取数据时,故意停顿了一下(sleep)。
夜深了,大家也应该sleep了吧:)