我在独立环境中使用spring3.1。我正在使用@cacable注解缓存我的条目。
有时我需要迭代缓存列表以获得特定的值(而不是键)。
因此,我设法检索缓存列表,但我如何迭代它的元素。
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;
}
我正在使用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" />
谢谢,雷。
3条答案
按热度按时间6fe3ivhb1#
getcache()返回一个net.sf.ehcache.cache,它有一个getkeys()方法,该方法返回可以迭代的缓存键列表。要检索已存储的实际对象(与 Package 的net.sf.ehcache.element相反),请使用element.getobjectvalue()。
edit:根据spring的说法,它们似乎永远都不支持cache.getkeys(),所以您必须强制转换到底层提供程序。
像这样:
kt06eoxx2#
另一个解决方案是使用getnativecache()方法将org.springframework.cache.cache解析为javax.cache.cache,并使用java迭代器,因为javax.cache.cache已经扩展了iterable>。
有关更多详细信息,请阅读javax.cache.cache javadoc
nafvub8i3#
下面的方法将给出一组缓存对象的键,但是如果在这里添加带有键的缓存,则很容易检索(如果直接添加要缓存的对象列表,则无法检索)。
另外,我在缓存管理器中使用了guavacache,如下所示。
然后它将返回作为对象的键列表,然后您将获得键,您可以遍历键并从缓存中逐个获取对象。
类中的autowire springboot cachemanager
下面是获取所有密钥的代码。