2012-08-06 14 views
6

मैं स्टैंडअलोन एनवी में Spring3.1 का उपयोग कर रहा हूं। मैं @Cachable एनोटेशन का उपयोग करके अपनी प्रविष्टि को कैश कर रहा हूं।कैश प्रविष्टियों पर Iterate कैसे करें

कभी-कभी मुझे विशिष्ट मान (कुंजी नहीं) प्राप्त करने के लिए कैशिंग सूची पर फिर से प्रयास करने की आवश्यकता होती है।

इसलिए मैं कैश की गई सूची को पुनः प्राप्त करने में कामयाब रहा लेकिन मैं इसके तत्वों को कैसे पुन: सक्रिय कर सकता हूं।

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" /> 

धन्यवाद, किरण।

उत्तर

12

CacheManager.getCache() net.sf.ehcache.Cache देता है, जिसमें getKeys() विधि है जो कैश कुंजी की एक सूची देता है जिसे आप फिर से चालू कर सकते हैं। संग्रहीत वास्तविक ऑब्जेक्ट को पुनर्प्राप्त करने के लिए (लपेटा net.sf.ehcache.Element के विपरीत), Element.getObjectValue() का उपयोग करें।

संपादित करें: वसंत it doesn't look like they will ever support 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; 
} 
+2

लेकिन मैं न cache.getKeys है() विधि। मैं org.springframework.cache.Cache – rayman

+0

का उपयोग कर रहा हूं क्या आपको कोई समाधान मिला? Infinispan कैश पर फिर से कैसे करें। मुझे चाबियाँ चाहिए –

+1

क्या आपने अंतर्निहित प्रदाता को डाला था? –

संबंधित मुद्दे