Jeesite的cahche工具类

本CacheUtils主要是基于shiro的cache进行处理.
其他选择: 类似的我们可以选择java cache ,spring cahche等方案.
                  再进一步使用,估计就是使用缓存策略和一些内存工具进行结合比如Ehcache 或者其他工具.
                  最后的解决方案好像可以使用redis做分布式缓存.

  1. /**
  2. * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
  3. */
  4. package com.thinkgem.jeesite.common.utils;
  5. import java.util.Iterator;
  6. import java.util.Set;
  7. import org.apache.shiro.cache.Cache;
  8. import org.apache.shiro.cache.CacheManager;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. /**
  12. * Cache工具类
  13. * @author ThinkGem
  14. * @version 2013-5-29
  15. */
  16. public class CacheUtils {
  17. private static Logger logger = LoggerFactory.getLogger(CacheUtils.class); //本类Logger
  18. private static CacheManager cacheManager = SpringContextHolder.getBean(CacheManager.class);
  19. private static final String SYS_CACHE = "sysCache";
  20. /**
  21. * 获取SYS_CACHE缓存
  22. * @param key
  23. * @return
  24. */
  25. public static Object get(String key) {
  26. return get(SYS_CACHE, key);
  27. }
  28. /**
  29. * 获取SYS_CACHE缓存
  30. * @param key
  31. * @param defaultValue
  32. * @return
  33. */
  34. public static Object get(String key, Object defaultValue) {
  35. Object value = get(key);
  36. return value != null ? value : defaultValue;
  37. }
  38. /**
  39. * 写入SYS_CACHE缓存
  40. * @param key
  41. * @return
  42. */
  43. public static void put(String key, Object value) {
  44. put(SYS_CACHE, key, value);
  45. }
  46. /**
  47. * 从SYS_CACHE缓存中移除
  48. * @param key
  49. * @return
  50. */
  51. public static void remove(String key) {
  52. remove(SYS_CACHE, key);
  53. }
  54. /**
  55. * 获取缓存
  56. * @param cacheName
  57. * @param key
  58. * @return
  59. */
  60. public static Object get(String cacheName, String key) {
  61. return getCache(cacheName).get(getKey(key));
  62. }
  63. /**
  64. * 获取缓存
  65. * @param cacheName
  66. * @param key
  67. * @param defaultValue
  68. * @return
  69. */
  70. public static Object get(String cacheName, String key, Object defaultValue) {
  71. Object value = get(cacheName, getKey(key));
  72. return value != null ? value : defaultValue;
  73. }
  74. /**
  75. * 写入缓存
  76. * @param cacheName
  77. * @param key
  78. * @param value
  79. */
  80. public static void put(String cacheName, String key, Object value) {
  81. getCache(cacheName).put(getKey(key), value);
  82. }
  83. /**
  84. * 从缓存中移除
  85. * @param cacheName
  86. * @param key
  87. */
  88. public static void remove(String cacheName, String key) {
  89. getCache(cacheName).remove(getKey(key));
  90. }
  91. /**
  92. * 从缓存中移除所有
  93. * @param cacheName
  94. */
  95. public static void removeAll(String cacheName) {
  96. Cache<String, Object> cache = getCache(cacheName);
  97. Set<String> keys = cache.keys();
  98. for (Iterator<String> it = keys.iterator(); it.hasNext();){
  99. cache.remove(it.next());
  100. }
  101. logger.info("清理缓存: {} => {}", cacheName, keys);
  102. }
  103. /**
  104. * 获取缓存键名,多数据源下增加数据源名称前缀
  105. * @param key
  106. * @return
  107. */
  108. private static String getKey(String key){
  109. // String dsName = DataSourceHolder.getDataSourceName();
  110. // if (StringUtils.isNotBlank(dsName)){
  111. // return dsName + "_" + key;
  112. // }
  113. return key;
  114. }
  115. /**
  116. * 获得一个Cache,没有则显示日志。
  117. * @param cacheName
  118. * @return
  119. */
  120. private static Cache<String, Object> getCache(String cacheName){
  121. Cache<String, Object> cache = cacheManager.getCache(cacheName);
  122. if (cache == null){
  123. throw new RuntimeException("当前系统中没有定义“"+cacheName+"”这个缓存。");
  124. }
  125. return cache;
  126. }
  127. }





原文地址:https://www.cnblogs.com/redcoatjk/p/5981307.html