代码之家  ›  专栏  ›  技术社区  ›  laksmi iragavarapu

如何将ehcache配置为仅在成功检索过期对象的较新版本时才替换该对象

  •  0
  • laksmi iragavarapu  · 技术社区  · 7 年前

    目前,我正在为我的web应用程序使用Spring web framework。我已经实现了一个基本的CacheConfig。读取ehcache的java文件。xml和创建CacheManager,用于从缓存中获取元素或将元素添加到缓存中。我的ehcache。慢性粒细胞白血病如下:

        <cache name="Cache"
           maxEntriesLocalHeap="100"
           maxEntriesLocalDisk="0"
           eternal="false"
           diskSpoolBufferSizeMB="0"
           timeToIdleSeconds="43200"
           timeToLiveSeconds="43200"
           memoryStoreEvictionPolicy="LFU"
           >
        <persistence strategy="none"/>   
    

    如何确保通过首先从后端数据库(SOR)中查找对象来刷新缓存,并且只有在成功检索时才能删除元素的旧版本?

    编辑 :refreshahead策略的CacheLoader。

    public class TestCacheLoader implements CacheLoader {
    @Override
    public Object load(Object key) throws CacheException {
        //return null;
        return load(key,null);
    
    
    }
    
    @Override
    public Map loadAll(Collection keys) {
        //return null;
        return loadAll(keys,null);
    }
    
    @Override
    public Object load(Object key, Object argument) {
        Object obj = null;
        try {
           obj = ReadFromDatabase(key);
        } catch (DatabaseValueNotFoundException e) {
          **How can I return the old value here?**
        }
        return obj;
    }
    
    @Override
    public Map loadAll(Collection keys, Object argument) {
        //return null;
        Map newValues = new HashMap<Object,Object>();
        for(Object key : keys){
            Object value = load(key,null);
            if(value != null){
                newValues.put(key,value);
            }
        }
        return newValues;
    }
    
    @Override
    public String getName() {
        return null;
    }
    
    @Override
    public CacheLoader clone(Ehcache ehcache) throws CloneNotSupportedException {
        return null;
    }
    
    @Override
    public void init() {
    
    }
    
    @Override
    public void dispose() throws CacheException {
    
    }
    
    @Override
    public Status getStatus() {
        return null;
    }
    

    }

    1 回复  |  直到 7 年前
        1
  •  0
  •   Louis Jacomet    7 年前

    没有现成的支持来满足您的要求。

    Ehcache 2。x支持 refresh ahead 可以进一步调整 scheduled refresh ahead . 这并不完全是你想要的,但可能已经足够接近了。

    **编辑问题后添加内容**

    您的编辑建议您保留一个过时的值,因为DB不再有该键的条目,而不是告诉用户没有值。这里同样没有支持,因为这违反了缓存的原则。