0

有没有人尝试过基于时间戳使 memcached 命名空间无效?例如,我需要一个 memcached 命名空间,它是托管我的 API 服务的 tomcat 服务器的时间戳。我需要注释我的方法调用,以便命名空间是一个变量(而不是一个常量),并且它包含服务器启动的时间戳。

@ReadThroughAssignCache(namespace = "api_divisions_", assignedKey="allDivisions")
public List<Division> getAllDivisions()
{
    List<Division> all = (List<Division>)getHibernateTemplate().find("from Division");
    return all;
}

那么每次服务器启动时,需要将该方法上的命名空间动态设置为服务器启动时间。

更新 - 我知道有一种使用 javaassist 和动态注释的迂回方法,但我想要一种更好的方法。

-戈茨

4

1 回答 1

1

命名空间始终是常量,不能使用变量。据我了解,您想使用服务器启动时间创建缓存键。至少有两种方法可以做到。第一:使用@ReadThroughSingleCache

@ReadThroughSingleCache(namespace = "api_divisions_allDivisions")
public List<Division> getAllDivisions(@ParameterValueKeyProvider long startup)
{
  List<Division> all = (List<Division>)getHibernateTemplate().find("from Division");
  return all;
}

第二:使用自定义CacheKeyBuilder可以为每个缓存键添加时间戳。

您是否需要在服务器启动之前存储旧值?如果不是,那么简单的解决方案是始终使用相同的缓存键并在服务器启动时清理 memcached。

于 2012-05-29T17:52:20.653 回答