@Cacheable - 如何在不知道缓存ID的情况下逐出对象?

时间:2013-03-07 10:54:08

标签: java performance spring ehcache

我有一个简单的Spring应用程序,它有一个方法:

@Cacheable("getSession")
public Session getSession(String sessionId) { ...

由eh-cache支持并且运行良好。我遇到问题的地方是我需要从这个缓存中驱逐对象,而不是基于sessionId(它们在缓存中键入的GUID),而是由返回对象的数据库Id驱逐:

public void evictSessionFromCache(long id) { ...

在此对象需要被驱逐的时候,我无法知道sessionId。

有人对此有任何指示吗?我已经尝试扩展EhCacheCacheManager以返回一个包装的Cache对象,其中包含db ID和sessionID之间的映射,但这感觉就像一个笨重的解决方案:

if(name.equals("getSession")) {
    if(wrappedCache == null) {
        wrappedCache = new WrappedCache(super.getCache(name));
    }
    return wrappedCache;
} else {
    return super.getCache(name);
}

我是否可以使用开箱即用的属性来利用此注释并通过多个ID访问对象?或者我应该忘记注释并直接操作缓存/缓存管理器?

谢谢!

0 个答案:

没有答案