CacheService.java
4.95 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
package com.yoho.search.cache;
import java.io.NotSerializableException;
import java.io.Serializable;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.stereotype.Service;
import com.yoho.search.cache.impl.EhCacheImpl;
import com.yoho.search.exception.CacheException;
import com.yoho.search.utils.TimeUtils;
/**
* 功能描述:Cache类
*/
@Service
public class CacheService {
public CacheInterface cacheInterface;
/**
* 初始化缓存服务
*/
@PostConstruct
public void init() {
cacheInterface = EhCacheImpl.getInstance();
}
/**
* 新增一个元素,该元素不存在
* @param expiration 表达式: 10s, 3mn, 8h
*/
public void add(String key, Object value, String expiration) {
checkSerializable(value);
cacheInterface.add(key, value, TimeUtils.parseDuration(expiration));
}
/**
* 同步新增一个元素
* @param expiration 表达式: 10s, 3mn, 8h
*/
public boolean safeAdd(String key, Object value, String expiration) {
checkSerializable(value);
return cacheInterface.safeAdd(key, value, TimeUtils.parseDuration(expiration));
}
/**
* 新增一个元素,不设置缓存时间
*/
public void add(String key, Object value) {
checkSerializable(value);
cacheInterface.add(key, value, TimeUtils.parseDuration(null));
}
/**
* 设置一个元素
* @param expiration 表达式: 10s, 3mn, 8h
*/
public void set(String key, Object value, String expiration) {
checkSerializable(value);
cacheInterface.set(key, value, TimeUtils.parseDuration(expiration));
}
/**
* 同步设置一个元素
* @param expiration 表达式: 10s, 3mn, 8h
*/
public boolean safeSet(String key, Object value, String expiration) {
checkSerializable(value);
return cacheInterface.safeSet(key, value, TimeUtils.parseDuration(expiration));
}
/**
* 设置一个元素,不设置缓存时间
*/
public void set(String key, Object value) {
checkSerializable(value);
cacheInterface.set(key, value, TimeUtils.parseDuration(null));
}
/**
* 替换一个已经存在的元素
* @param expiration 表达式: 10s, 3mn, 8h
*/
public void replace(String key, Object value, String expiration) {
checkSerializable(value);
cacheInterface.replace(key, value, TimeUtils.parseDuration(expiration));
}
/**
* 同步替换一个已经存在的元素
* @param expiration 表达式: 10s, 3mn, 8h
*/
public boolean safeReplace(String key, Object value, String expiration) {
checkSerializable(value);
return cacheInterface.safeReplace(key, value, TimeUtils.parseDuration(expiration));
}
/**
* 替换一个已经存在的元素,不限时
* @param key Element key
* @param value Element value
*/
public void replace(String key, Object value) {
checkSerializable(value);
cacheInterface.replace(key, value, TimeUtils.parseDuration(null));
}
/**
* 元素自增长
* @param by 增长幅值,必须数字
*/
public long incr(String key, int by) {
return cacheInterface.incr(key, by);
}
/**
* 元素自增,按1递增
*/
public long incr(String key) {
return cacheInterface.incr(key, 1);
}
/**
* 元素自减
* @param by 自减幅值,必须数字
*/
public long decr(String key, int by) {
return cacheInterface.decr(key, by);
}
/**
* 元素自减,按1递减
*/
public long decr(String key) {
return cacheInterface.decr(key, 1);
}
public Object get(String key) {
return cacheInterface.get(key);
}
/**
* Bulk retrieve.
* @param key List of keys
* @return Map of keys & values
*/
public Map<String, Object> get(String... key) {
return cacheInterface.get(key);
}
/**
* 删除元素
*/
public void delete(String key) {
cacheInterface.delete(key);
}
/**
* 同步删除元素
*/
public boolean safeDelete(String key) {
return cacheInterface.safeDelete(key);
}
/**
* 清空缓存
*/
public void clear() {
cacheInterface.clear();
}
/**
* 提供一个类型控制的get方法
*/
@SuppressWarnings("unchecked")
public <T> T get(String key, Class<T> clazz) {
return (T) cacheInterface.get(key);
}
/**
* 关掉缓存服务
*/
public void stop() {
cacheInterface.stop();
}
/**
* 检查对象是否可序列化
*/
void checkSerializable(Object value) {
if(value != null && !(value instanceof Serializable)) {
throw new CacheException("该类对象不可序列化 " + value.getClass().getName(), new NotSerializableException(value.getClass().getName()));
}
}
}