EhCacheImpl.java
3.22 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
package com.yoho.search.cache.impl;
import java.util.HashMap;
import java.util.Map;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.yoho.search.cache.CacheInterface;
public class EhCacheImpl implements CacheInterface {
private static final Logger logger = LoggerFactory.getLogger(EhCacheImpl.class);
private final static EhCacheImpl uniqueInstance = new EhCacheImpl();
private CacheManager cacheManager;
private Cache cache;
private static final String cacheName = "talent";
private EhCacheImpl() {
this.cacheManager = CacheManager.create();
this.cacheManager.addCache(cacheName);
this.cache = cacheManager.getCache(cacheName);
}
public static EhCacheImpl getInstance() {
return uniqueInstance;
}
public void add(String key, Object value, int expiration) {
if (cache.get(key) != null) {
return;
}
Element element = new Element(key, value);
element.setTimeToLive(expiration);
cache.put(element);
}
public void clear() {
cache.removeAll();
}
public synchronized long decr(String key, int by) {
Element e = cache.get(key);
if (e == null) {
return -1;
}
long newValue = ((Number) e.getValue()).longValue() - by;
Element newE = new Element(key, newValue);
newE.setTimeToLive(e.getTimeToLive());
cache.put(newE);
return newValue;
}
public void delete(String key) {
cache.remove(key);
}
public Object get(String key) {
Element e = cache.get(key);
return (e == null) ? null : e.getValue();
}
public Map<String, Object> get(String[] keys) {
Map<String, Object> result = new HashMap<String, Object>(keys.length);
for (String key : keys) {
result.put(key, get(key));
}
return result;
}
public synchronized long incr(String key, int by) {
Element e = cache.get(key);
if (e == null) {
return -1;
}
long newValue = ((Number) e.getValue()).longValue() + by;
Element newE = new Element(key, newValue);
newE.setTimeToLive(e.getTimeToLive());
cache.put(newE);
return newValue;
}
public void replace(String key, Object value, int expiration) {
if (cache.get(key) == null) {
return;
}
Element element = new Element(key, value);
element.setTimeToLive(expiration);
cache.put(element);
}
public boolean safeAdd(String key, Object value, int expiration) {
try {
add(key, value, expiration);
return true;
} catch (Exception e) {
return false;
}
}
public boolean safeDelete(String key) {
try {
delete(key);
return true;
} catch (Exception e) {
logger.error(e.toString());
return false;
}
}
public boolean safeReplace(String key, Object value, int expiration) {
try {
replace(key, value, expiration);
return true;
} catch (Exception e) {
logger.error(e.toString());
return false;
}
}
public boolean safeSet(String key, Object value, int expiration) {
try {
set(key, value, expiration);
return true;
} catch (Exception e) {
logger.error(e.toString());
return false;
}
}
public void set(String key, Object value, int expiration) {
Element element = new Element(key, value);
element.setTimeToLive(expiration);
cache.put(element);
}
public void stop() {
cacheManager.shutdown();
}
}