ray*_*man 6 java spring caching ehcache
我在独立的环境中使用Spring3.1.我正在使用@Cachable注释来缓存我的条目.
有时我需要迭代缓存列表以获取特定值(而不是键).
所以我设法检索缓存列表,但我怎么能迭代它的元素.
private ClientDTO getClientDTOByClientId(Integer clientId)
{
Cache clientCache = null;
try
{
clientCache = ehCacheCacheManager.getCache("client");
//need here to iterate on clientCache. how?
}
catch (Exception e)
{
log.error("Couldnt retrieve client from cache. clientId=" + clientId);
}
return clientDTO;
}
Run Code Online (Sandbox Code Playgroud)
我使用ehcache机制.
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cache-manager-ref="ehcache" />
<bean id="ehcache"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:config-location="classpath:ehcache.xml" />
Run Code Online (Sandbox Code Playgroud)
谢谢,雷.
Mat*_*ock 15
CacheManager.getCache()返回一个net.sf.ehcache.Cache,它有一个getKeys()方法,它返回一个可以迭代的缓存键列表.要检索已存储的实际对象(而不是包装的net.sf.ehcache.Element),请使用Element.getObjectValue().
编辑:根据Spring ,看起来他们不会支持Cache.getKeys(),所以你必须转发给底层提供者.
像这样的东西:
public boolean contains(String cacheName, Object o) {
net.sf.ehcache.EhCache cache = (net.sf.ehcache.EhCache) org.springframework.cache.CacheManager.getCache(cacheName).getNativeCache();
for (Object key: cache.getKeys()) {
Element element = cache.get(key);
if (element != null && element.getObjectValue().equals(o)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
另一种解决方案,使用 getNativeCache() 方法将 org.springframework.cache.Cache 解析为 javax.cache.Cache 并使用 java 迭代器,因为 javax.cache.Cache 已经扩展了 Iterable>。
有关更多详细信息,请阅读javax.cache.Cache javadoc
Cache cache = (Cache) cacheManager.getCache("yourCacheName").getNativeCache();
Iterator<Cache.Entry> iterator = cache.iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next().getKey();
System.out.println(key);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25421 次 |
| 最近记录: |