मैं अपने अनुप्रयोग में लोड होने वाली वस्तुओं को कैश करने के लिए एशैच का उपयोग कर रहा हूं। स्टार्ट-अप पर मैं सभी आवश्यक वस्तुओं को कैश करता हूं और दिन में एक बार एक अलग प्रक्रिया से ताज़ा हो जाता है।Ehcache ऑब्जेक्ट्स खोना
हालांकि, ऐसा लगता है कि कैश में ऑब्जेक्ट जोड़ने के कुछ ही समय बाद, वे गायब हो जाते हैं। बेदखल होने के बारे में कुछ भी नहीं बताया जा रहा है, लेकिन कुछ कारणों से वस्तुओं को कैश में नहीं चल रहा है।
2012-09-01 17:25:37,121 [main] DEBUG ObjectLoader.getObject():65 - ************************************
2012-09-01 17:25:37,121 [main] DEBUG ObjectLoader.getObject():66 - Number of objects in cache: 0
2012-09-01 17:25:37,121 [main] DEBUG ObjectLoader.getObject():72 - Object not in cache | 501
2012-09-01 17:26:17,271 [main] DEBUG ObjectLoader.getObject():80 - Number of objects in cache: 1
2012-09-01 17:26:17,271 [main] DEBUG ObjectLoader.getObject():81 - Number of objects evicted from cache: 0
2012-09-01 17:26:17,274 [main] DEBUG ObjectLoader.getObject():83 - Object key found: 501
2012-09-01 17:26:17,274 [main] DEBUG ObjectLoader.getObject():65 - ************************************
2012-09-01 17:26:17,274 [main] DEBUG ObjectLoader.getObject():66 - Number of objects in cache: 1
2012-09-01 17:26:17,274 [main] DEBUG ObjectLoader.getObject():72 - Object not in cache | 518
2012-09-01 17:26:35,894 [main] DEBUG ObjectLoader.getObject():80 - Number of objects in cache: 1
2012-09-01 17:26:35,895 [main] DEBUG ObjectLoader.getObject():81 - Number of objects evicted from cache: 0
2012-09-01 17:26:35,895 [main] DEBUG ObjectLoader.getObject():83 - Object key found: 518
2012-09-01 17:26:35,895 [main] DEBUG ObjectLoader.getObject():65 - ************************************
2012-09-01 17:26:35,895 [main] DEBUG ObjectLoader.getObject():66 - Number of objects in cache: 1
2012-09-01 17:26:35,895 [main] DEBUG ObjectLoader.getObject():72 - Object not in cache | 516
2012-09-01 17:27:31,997 [main] DEBUG ObjectLoader.getObject():80 - Number of objects in cache: 1
2012-09-01 17:27:31,998 [main] DEBUG ObjectLoader.getObject():81 - Number of objects evicted from cache: 0
2012-09-01 17:27:31,998 [main] DEBUG ObjectLoader.getObject():83 - Object key found: 516
2012-09-01 17:27:31,998 [main] DEBUG ObjectLoader.getObject():65 - ************************************
2012-09-01 17:27:31,998 [main] DEBUG ObjectLoader.getObject():66 - Number of objects in cache: 1
2012-09-01 17:27:31,998 [main] DEBUG ObjectLoader.getObject():72 - Object not in cache | 515
2012-09-01 17:28:20,343 [main] DEBUG ObjectLoader.getObject():80 - Number of objects in cache: 1
2012-09-01 17:28:20,343 [main] DEBUG ObjectLoader.getObject():81 - Number of objects evicted from cache: 0
2012-09-01 17:28:20,344 [main] DEBUG ObjectLoader.getObject():83 - Object key found: 515
2012-09-01 17:28:20,344 [main] DEBUG ObjectLoader.getObject():65 - ************************************
2012-09-01 17:28:20,344 [main] DEBUG ObjectLoader.getObject():66 - Number of objects in cache: 1
2012-09-01 17:28:20,344 [main] DEBUG ObjectLoader.getObject():72 - Object not in cache | 525
2012-09-01 17:29:05,616 [main] DEBUG ObjectLoader.getObject():80 - Number of objects in cache: 1
2012-09-01 17:29:05,617 [main] DEBUG ObjectLoader.getObject():81 - Number of objects evicted from cache: 0
2012-09-01 17:29:05,617 [main] DEBUG ObjectLoader.getObject():83 - Object key found: 525
2012-09-01 17:29:05,617 [main] DEBUG ObjectLoader.getObject():65 - ************************************
2012-09-01 17:29:05,617 [main] DEBUG ObjectLoader.getObject():66 - Number of objects in cache: 1
2012-09-01 17:29:05,618 [main] DEBUG ObjectLoader.getObject():72 - Object not in cache | 512
2012-09-01 17:29:38,790 [main] DEBUG ObjectLoader.getObject():80 - Number of objects in cache: 1
2012-09-01 17:29:38,790 [main] DEBUG ObjectLoader.getObject():81 - Number of objects evicted from cache: 0
2012-09-01 17:29:38,790 [main] DEBUG ObjectLoader.getObject():83 - Object key found: 512
मैं गलत कॉन्फ़िगर किया गया ehcache है करो या मैं अपने कोड में एक बग की क्या ज़रूरत है: जब मैं ObjectLoader.loadCache चलाने() इस उत्पादन मैं प्राप्त कर रहा हूँ है? किसी भी सहायता की सराहना की जाएगी। धन्यवाद।
मैं वसंत 3.1.0, ehcache वसंत-एनोटेशन 1.1.2, और ehcache 2.4.2
ObjectCacheFacade.java
@Component()
public class ObjectCacheFacade {
private static final String CACHE_KEY = "myObjectCache";
@Resource
private CacheManager cacheManager;
private Cache cache;
public ObjectCacheFacade() {
cacheManager = CacheManager.getInstance();
this.cache = cacheManager.getCache(CACHE_KEY);
}
public Object getObjectFromCache(String objectId) {
Object result = null;
Element element = cache.get(objectId);
if (element != null && element.getValue() != null) {
result = element.getObjectValue();
}
return result;
}
public void putObjectIntoCache(String objectId, Object object) {
Element element = new Element(objectId, object);
cache.put(element);
}
public int getSize() {
return cache.getSize();
}
public void removeObjectFromCache(String objectId) {
cache.remove(objectId);
}
public void flushCache() {
cache.removeAll();
}
public Cache getCache() {
return cache;
}
}
ObjectLoader.java
उपयोग कर रहा हूँ@Service
public class ObjectLoader {
private static final Logger log = Logger.getLogger(ObjectLoader.class);
@Resource
protected ObjectDao objectDao;
@Resource
protected ObjectCacheFacade objectCache;
public void loadCache() {
List<String> objectIds = objectDao.getObjectIds();
for (String objectId : objectIds) {
loadObject(objectId);
}
}
public Object getObject(String objectId) {
log.debug("************************************");
log.debug("Number of objects in cache: " + objectCache.getSize());
Object object = objectCache.getObjectFromCache(objectId);
if (object == null) {
log.debug("Object not in cache | " + objectId);
object = objectDao.getObject(objectId);
if (object != null) {
objectCache.putObjectIntoCache(objectId, object);
log.debug("Number of objects in cache: " + objectCache.getSize());
log.debug("Number of objects evicted from cache: " + objectCache.getCache().getCacheEventNotificationService().getElementsEvictedCounter());
for (Object key : objectCache.getCache().getKeys()) {
log.debug("Object key found: " + key);
}
}
}
return object;
}
}
ehcache.xml
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="60"
timeToLiveSeconds="300"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
<cache
name="myObjectCache"
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
applicationContext.xml
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
मुझे संदेह है कि आप ओवरफ्लो टोडडिस्क = "सत्य" चाहते हैं। इसके अलावा, यदि आप EHCache 2.6 या बाद में उपयोग कर रहे हैं, तो आपको इसके बजाय का उपयोग करना चाहिए। http://ehcache.org/documentation/configuration/fast-restart पर एक नज़र डालें –
GreyBeardedGeek