是否有人尝试根据时间戳使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和动态注释有一种迂回的方式,但我想要一个更好的方法。
-Gotz
答案 0 :(得分: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。