如何使用简单的memcached获取与键相关的值?

时间:2014-05-12 15:05:34

标签: memcached spymemcached

将对象添加到" 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创建一个新的命名空间?

1 个答案:

答案 0 :(得分:1)

Simple Spring Memcached(SSM)注释@ReadThroughSingleCache以下列方式工作:

  1. 拦截方法(getComplexObjectFromDB)调用并检查值是否在缓存中,如果是,则返回它并且不执行该方法。
  2. 结果不在缓存中,因此请执行方法(getComplexObjectFromDB)。
  3. 将结果存储在缓存中。
  4. 返回结果。
  5. 如您所见,@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 而不是查询数据库时,将从缓存中返回结果。