将对象添加到" CplxObj"命名空间我使用以下内容:
@ReadThroughSingleCache(namespace = "CplxObj", expiration = EXPIRATION_TIME)
public List<MyObj> getComplexObjectFromDB(
@ParameterValueKeyProvider List<MyObj> listToAdd) {
return getSA(listToAdd);
}
/**
* simple-spring-memcached framework will add to cache if element does not exist
* @param listToAdd
* @return
*/
private List<MyObj> getSA(List<MyObj> listToAdd) {
System.out.println("Adding to cache");
return listToAdd;
}
但我怎样才能获得List<MyObj> for an associated key (eg a userId)
? ,像
public List<MyObj> getComplexObjectFromDB("userId") {
//logic to get the List associated with the key
}
我不认为我应该为每个ID创建一个新的命名空间?
答案 0 :(得分:1)
Simple Spring Memcached(SSM)注释@ReadThroughSingleCache
以下列方式工作:
如您所见,@ReadThroughSingleCache
会在缺席时将值放入缓存,并在缓存出现时从缓存中获取。
因为@ReadThroughSingleCache
将整个结果存储在单个缓存键下,所以它通常不与List @ParameterValueKeyProvider
一起使用。常见用法是:
@ReadThroughSingleCache(namespace = "CplxObj", expiration = EXPIRATION_TIME)
public List<User> getUserByNameFromDB(@ParameterValueKeyProvider String name) {
List<User> users = ......; // query DB to find users with given name
return users;
}
因此,下次使用相同的名称调用 getUserByNameFromDB 而不是查询数据库时,将从缓存中返回结果。