Ehcache.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /** Copyright 2009 by primeton Corporation.
  2. *
  3. * All rights reserved.
  4. *
  5. * This software is the confidential and proprietary information of
  6. * primeton Corporation ('Confidential Information'). You
  7. * shall not disclose such Confidential Information and shall use
  8. * it only in accordance with the terms of the license agreement
  9. * you entered into with primeton.
  10. */
  11. package com.primeton.dgs.kernel.core.cache.impl;
  12. import net.sf.ehcache.CacheManager;
  13. import net.sf.ehcache.Element;
  14. import com.primeton.dgs.kernel.core.cache.ICache;
  15. import net.sf.ehcache.search.Attribute;
  16. import net.sf.ehcache.search.Query;
  17. import net.sf.ehcache.search.Result;
  18. import net.sf.ehcache.search.Results;
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21. import java.io.IOException;
  22. import java.net.URL;
  23. import java.util.List;
  24. /**
  25. * @author xiongbin
  26. * @Version 2012-9-4
  27. */
  28. public class Ehcache implements ICache<Object> {
  29. private static Logger logger = LoggerFactory.getLogger(Ehcache.class);
  30. /**
  31. * EHCache
  32. */
  33. private final net.sf.ehcache.Ehcache cache;
  34. public Ehcache(){
  35. URL resource = Ehcache.class.getResource("/ehcache.xml");
  36. CacheManager manager = CacheManager.create(resource);
  37. net.sf.ehcache.Ehcache ehcache = manager.getCache("Cache");
  38. if(ehcache==null){
  39. manager.addCache("Cache");
  40. ehcache = manager.getEhcache("Cache");
  41. }
  42. this.cache = ehcache;
  43. }
  44. /* (non-Javadoc)
  45. * @see com.primeton.dgs.kernel.common.cache.ICache#add(java.lang.String, java.lang.Object)
  46. */
  47. @Override
  48. public void add(String key, Object value) {
  49. Element element = new Element(key, value);
  50. cache.put(element);
  51. }
  52. /* (non-Javadoc)
  53. * @see com.primeton.dgs.kernel.common.cache.ICache#add(java.lang.String, java.lang.Integer, java.lang.Object)
  54. */
  55. @Override
  56. public void add(String key, int exp, Object value) {
  57. Element element = new Element(key, value);
  58. element.setTimeToLive(exp);
  59. cache.put(element);
  60. }
  61. /* (non-Javadoc)
  62. * @see com.primeton.dgs.kernel.common.cache.ICache#replace(java.lang.String, java.lang.Object)
  63. */
  64. @Override
  65. public void replace(String key, Object value) {
  66. cache.put(new Element(key, value));
  67. }
  68. /* (non-Javadoc)
  69. * @see com.primeton.dgs.kernel.common.cache.ICache#replace(java.lang.String, java.lang.Integer, java.lang.Object)
  70. */
  71. @Override
  72. public void replace(String key, int exp, Object value) {
  73. add(key, exp, value);
  74. }
  75. /* (non-Javadoc)
  76. * @see com.primeton.dgs.kernel.common.cache.ICache#get(java.lang.String)
  77. */
  78. @Override
  79. public Object get(String key) {
  80. Element element = cache.get(key);
  81. if(element != null){
  82. return element.getValue();
  83. }
  84. return null;
  85. }
  86. /**
  87. * 移除某条缓存
  88. * @param key 缓存的 KEY
  89. * @return
  90. */
  91. @Override
  92. public Object remove(String key) {
  93. Element element = cache.get(key);
  94. cache.remove(key);
  95. logger.info("remove cache key: {}", key);
  96. if(element != null){
  97. return element.getObjectValue();
  98. }
  99. return null;
  100. }
  101. @Override
  102. public int removeByPrefix(String prefix) {
  103. Attribute<Object> keySearch = cache.getSearchAttribute("key");
  104. //创建一个用于查询的Query对象
  105. Query query = cache.createQuery();
  106. //给当前query添加一个筛选条件——可查询属性name的值等于“name1”
  107. query.addCriteria(keySearch.ilike(prefix+"*"));
  108. // ehcache 模糊删除
  109. query.includeAttribute(keySearch);
  110. query.includeKeys();
  111. Results result = query.execute();
  112. List<Result> keys = result.all();
  113. for (Result key : keys) {
  114. remove((String)key.getKey());
  115. }
  116. return result.size();
  117. }
  118. /* (non-Javadoc)
  119. * @see com.primeton.dgs.kernel.common.cache.ICache#clear()
  120. */
  121. @Override
  122. public void clear() {
  123. cache.removeAll();
  124. }
  125. /**
  126. * 获得缓存队列的长度
  127. * @return 返回大于等于 0 则代表真实长度,返回 -1 代表无法获得
  128. */
  129. @Override public int size() {
  130. return cache.getSize();
  131. }
  132. @Override
  133. public void close() throws IOException {
  134. cache.flush();
  135. }
  136. }