阅读本文的前提是,你已经安装或者使用了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了吧:)