通常在访问量大数据更新频率不高的系统中会使用第三方的缓存组件来降低数据库服务的负载,鉴于模块独立分工独立的考虑,针对缓存组件操作的工作全部应该统一接口对其他业务提供服务,这样业务操作只需要关注业务实现不需要关注缓存的具体细节。
本例以Redis缓存组件为例,制定操作Redis的工具类。

 

使用RedisTemplate进行Redis存取的工具类设计_qt
  1 package com.luwei.console.mg.util;
  2 
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.HashSet;
  6 import java.util.List;
  7 import java.util.Map;
  8 import java.util.Set;
  9 import java.util.concurrent.TimeUnit;
 10 
 11 import org.slf4j.Logger;
 12 import org.slf4j.LoggerFactory;
 13 import org.springframework.data.redis.core.HashOperations;
 14 import org.springframework.data.redis.core.ListOperations;
 15 import org.springframework.data.redis.core.RedisTemplate;
 16 import org.springframework.data.redis.core.SetOperations;
 17 import org.springframework.data.redis.core.ValueOperations;
 18 
 19 /**
 20  * 
 21  * <Description> Redis工具类<br>
 22  * 使用该工具类的JavaBean必须实现Serializable接口
 23  * 
 24  * @author lu.wei<br>
 25  * @email 1025742048@qq.com <br>
 26  * @date 2016年11月27日 <br>
 27  * @since V1.0<br>
 28  * @see com.luwei.console.mg.util <br>
 29  */
 30 public class RedisUtil {
 31 
 32     private static Logger logger = LoggerFactory.getLogger(RedisUtil.class);
 33 
 34     @SuppressWarnings("unchecked")
 35     private static RedisTemplate<String, Object> redisTemplate = (RedisTemplate<String, Object>) ContextUtil.getBean("redisTemplate");;
 36 
 37     /**
 38      * 
 39      * <Description> 根据前缀进行清除缓存<br>
 40      * 
 41      * @author lu.wei<br>
 42      * @email wei.lu@qq.com<br>
 43      * @date 2016年8月25日 下午2:41:29
 44      * @param prefix
 45      * <br>
 46      */
 47     public static void cleanRedis(String prefix) {
 48         logger.info("cleanRedis prefix: {}", prefix);
 49         try {
 50             if (null != prefix) {
 51                 if (null != redisTemplate) {
 52                     Set<String> keys = redisTemplate.keys(prefix + "*");
 53                     for (String key : keys) {
 54                         redisTemplate.delete(key);
 55                     }
 56                 }
 57             }
 58 
 59         } catch (Exception e) {
 60             logger.error("cleanRedis error : {} ", e.getMessage(), e);
 61         }
 62     }
 63 
 64     /**
 65      * 
 66      * <Description> 根据KEY进行清除缓存<br>
 67      * 
 68      * @author lu.wei<br>
 69      * @email 1025742048@qq.com<br>
 70      * @date 2016年10月28日 上午10:50:52
 71      * @param key
 72      * <br>
 73      */
 74     public static void cleanRedisByKey(String key) {
 75         logger.info("cleanRedisByKey key: {}", key);
 76         try {
 77             if (null != key) {
 78                 if (null != redisTemplate) {
 79                     redisTemplate.delete(key);
 80                 }
 81             }
 82 
 83         } catch (Exception e) {
 84             logger.error("cleanRedisByKey error : {} ", e.getMessage(), e);
 85         }
 86     }
 87 
 88     /**
 89      * 
 90      * <Description> 缓存字符串<br>
 91      * 
 92      * @author lu.wei<br>
 93      * @email 1025742048@qq.com<br>
 94      * @date 2016年12月22日 下午5:47:44
 95      * @param key
 96      * @param data
 97      * @param minus
 98      * <br>
 99      */
100     public static void putCacheStr(String key, String data, Long minus) {
101         logger.info("putCacheStr : {}, {}, {} minute", key, data, minus);
102         try {
103             ValueOperations<String, Object> opsValue = null;
104             if (null != redisTemplate) {
105                 opsValue = redisTemplate.opsForValue();
106                 if (null != opsValue) {
107                     opsValue.set(key, data);
108                 }
109             }
110         } catch (Exception e) {
111             logger.error("putCacheStr error : {} ", e.getMessage(), e);
112         }
113     }
114 
115     /**
116      * 
117      * <Description> 获取缓存字符串<br>
118      * 
119      * @author lu.wei<br>
120      * @email 1025742048@qq.com<br>
121      * @date 2016年12月22日 下午5:48:00
122      * @param key
123      * @return <br>
124      */
125     public static String getCacheStr(String key) {
126         logger.info("getCacheStr : {}", key);
127 
128         String retStr = null;
129         try {
130             ValueOperations<String, Object> opsValue = null;
131             if (null != redisTemplate) {
132                 opsValue = redisTemplate.opsForValue();
133                 if (null != opsValue) {
134                     retStr = String.valueOf(opsValue.get(key));
135                 }
136             }
137         } catch (Exception e) {
138             logger.error("getCacheStr error : {} ", e.getMessage(), e);
139         }
140         return retStr;
141     }
142 
143     /**
144      * 
145      * <Description> 缓存简单对象<br>
146      * 基本数据类型和简单对象
147      * 
148      * @author lu.wei<br>
149      * @email 1025742048@qq.com<br>
150      * @date 2016年12月22日 下午4:47:14
151      * @param key
152      * @param value
153      * @param minus
154      * <br>
155      */
156     public static void putCacheSimple(String key, Object data, Long minus) {
157         logger.info("putCacheSimple : {}, {}, {} minute", key, data, minus);
158         try {
159             ValueOperations<String, Object> opsValue = null;
160             if (null != redisTemplate) {
161                 opsValue = redisTemplate.opsForValue();
162                 if (null != opsValue) {
163                     opsValue.set(key, data);
164 
165                     if (null != minus) {
166                         redisTemplate.expire(key, minus, TimeUnit.MINUTES);
167                     }
168                 }
169             }
170         } catch (Exception e) {
171             logger.error("putCacheSimple error : {} ", e.getMessage(), e);
172         }
173     }
174 
175     /**
176      * 
177      * <Description> 获取缓存的简单对象<br>
178      * 
179      * @author lu.wei<br>
180      * @email 1025742048@qq.com<br>
181      * @date 2016年12月22日 下午4:50:16
182      * @param key
183      * @return <br>
184      */
185     public static Object getCacheSimple(String key) {
186         logger.info("getCacheSimple : {}", key);
187 
188         Object object = null;
189         try {
190             ValueOperations<String, Object> opsValue = null;
191             if (null != redisTemplate) {
192                 opsValue = redisTemplate.opsForValue();
193                 if (null != opsValue) {
194                     object = (Object) opsValue.get(key);
195                 }
196             }
197         } catch (Exception e) {
198             logger.error("getCacheSimple error : {} ", e.getMessage(), e);
199         }
200         return object;
201     }
202 
203     /**
204      * 
205      * <Description> 缓存List数据<br>
206      * 
207      * @author lu.wei<br>
208      * @email 1025742048@qq.com<br>
209      * @date 2016年12月22日 下午4:52:43
210      * @param key
211      * @param datas
212      * @param minus
213      * <br>
214      */
215     public static void putCacheList(String key, List<?> datas, Long minus) {
216         logger.info("putCacheList : {}, {}, {} minute", key, datas, minus);
217         try {
218             ListOperations<String, Object> opsList = null;
219             if (null != redisTemplate) {
220                 opsList = redisTemplate.opsForList();
221                 if (null != opsList) {
222                     int size = datas.size();
223                     for (int i = 0; i < size; i++) {
224                         opsList.leftPush(key, datas.get(i));
225                     }
226 
227                     if (null != minus) {
228                         redisTemplate.expire(key, minus, TimeUnit.MINUTES);
229                     }
230                 }
231             }
232         } catch (Exception e) {
233             logger.error("putCacheList error : {} ", e.getMessage(), e);
234         }
235     }
236 
237     /**
238      * 
239      * <Description> 获取缓存的List对象<br>
240      * 
241      * @author lu.wei<br>
242      * @email 1025742048@qq.com<br>
243      * @date 2016年12月22日 下午4:50:16
244      * @param key
245      * @return <br>
246      */
247     public static List<Object> getCacheList(String key) {
248         logger.info("getCacheList : {}", key);
249 
250         List<Object> dataList = new ArrayList<Object>();
251         try {
252             ListOperations<String, Object> opsList = null;
253             if (null != redisTemplate) {
254                 opsList = redisTemplate.opsForList();
255                 if (null != opsList) {
256                     Long size = opsList.size(key);
257                     for (int i = 0; i < size; i++) {
258                         dataList.add(opsList.index(key, i));
259                     }
260                 }
261             }
262         } catch (Exception e) {
263             logger.error("getCacheList error : {} ", e.getMessage(), e);
264         }
265         return dataList;
266     }
267 
268     /**
269      * 
270      * <Description> 缓存SET数据<br>
271      * 
272      * @author lu.wei<br>
273      * @email 1025742048@qq.com<br>
274      * @date 2016年12月22日 下午5:21:30
275      * @param key
276      * @param datas
277      * @param minus
278      * <br>
279      */
280     public static void putCacheSet(String key, Set<?> datas, Long minus) {
281         logger.info("putCacheList : {}, {}, {} minute", key, datas, minus);
282         try {
283             SetOperations<String, Object> opsSet = null;
284             if (null != redisTemplate) {
285                 opsSet = redisTemplate.opsForSet();
286                 if (null != opsSet) {
287                     opsSet.add(key, datas);
288 
289                     if (null != minus) {
290                         redisTemplate.expire(key, minus, TimeUnit.MINUTES);
291                     }
292                 }
293             }
294         } catch (Exception e) {
295             logger.error("putCacheList error : {} ", e.getMessage(), e);
296         }
297     }
298 
299     /**
300      * 
301      * <Description> 获取缓存的SET对象<br>
302      * 
303      * @author lu.wei<br>
304      * @email 1025742048@qq.com<br>
305      * @date 2016年12月22日 下午4:50:16
306      * @param key
307      * @return <br>
308      */
309     public static Set<Object> getCacheSet(String key) {
310         logger.info("getCacheSet : {}", key);
311 
312         Set<Object> dataSet = new HashSet<Object>();
313         try {
314             SetOperations<String, Object> opsSet = null;
315             if (null != redisTemplate) {
316                 opsSet = redisTemplate.opsForSet();
317                 if (null != opsSet) {
318                     dataSet = opsSet.members(key);
319                 }
320             }
321         } catch (Exception e) {
322             logger.error("getCacheSet error : {} ", e.getMessage(), e);
323         }
324         return dataSet;
325     }
326 
327     /**
328      * 
329      * <Description> 缓存MAP数据<br>
330      * 
331      * @author lu.wei<br>
332      * @email 1025742048@qq.com<br>
333      * @date 2016年12月22日 下午5:21:30
334      * @param key
335      * @param datas
336      * @param minus
337      * <br>
338      */
339     public static void putCacheMap(String key, Map<Object, Object> datas, Long minus) {
340         logger.info("putCacheMap : {}, {}, {} minute", key, datas, minus);
341         try {
342             HashOperations<String, Object, Object> opsHash = null;
343             if (null != redisTemplate) {
344                 opsHash = redisTemplate.opsForHash();
345                 if (null != opsHash) {
346                     opsHash.putAll(key, datas);
347 
348                     if (null != minus) {
349                         redisTemplate.expire(key, minus, TimeUnit.MINUTES);
350                     }
351                 }
352             }
353         } catch (Exception e) {
354             logger.error("putCacheMap error : {} ", e.getMessage(), e);
355         }
356     }
357 
358     /**
359      * 
360      * <Description> 获取缓存的MAP对象<br>
361      * 
362      * @author lu.wei<br>
363      * @email 1025742048@qq.com<br>
364      * @date 2016年12月22日 下午4:50:16
365      * @param key
366      * @return <br>
367      */
368     public static Map<Object, Object> getCacheMap(String key) {
369         logger.info("getCacheMap : {}", key);
370 
371         Map<Object, Object> dataMap = new HashMap<Object, Object>();
372         try {
373             HashOperations<String, Object, Object> opsHash = null;
374             if (null != redisTemplate) {
375                 opsHash = redisTemplate.opsForHash();
376                 if (null != opsHash) {
377                     dataMap = opsHash.entries(key);
378                 }
379             }
380         } catch (Exception e) {
381             logger.error("getCacheMap error : {} ", e.getMessage(), e);
382         }
383         return dataMap;
384     }
385 
386     /**
387      * 
388      * <Description> TODO<br>
389      * 
390      * @author lu.wei<br>
391      * @email 1025742048@qq.com<br>
392      * @date 2016年10月27日 下午1:54:58
393      * @return <br>
394      */
395     public static RedisTemplate<String, Object> getRedisTemplate() {
396         return redisTemplate;
397     }
398 }
使用RedisTemplate进行Redis存取的工具类设计_qt