2012-05-23 5 views
0

Кто-нибудь пытался сделать недействительным пространство имен memcached на основе timestamp? . Мне нужно иметь пространство имен memcached, которое является меткой времени сервера tomcat, на котором размещаются мои службы API. Мне нужно аннотировать вызовы методов, чтобы пространство имен было переменной (а не константой), и оно содержит отметку времени запуска сервера.Недействительное пространство имен с использованием простой весны memcached

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

Затем каждый сервер запускается, пространство имен этого метода необходимо динамически установить на время запуска сервера.

Обновление - я знаю, что есть обходной способ использования этого с помощью javaassist и динамических аннотаций, но мне нужен лучший подход.

-Gotz

ответ

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 на сервере.

+0

Спасибо за ответ. Ну, мне не нужны старые значения при запуске сервера. Наличие временной метки было простым подходом к обновлению кеша при запуске сервера, и LRU позаботится об остальном. Но есть ли способ, с помощью которого я могу аннулировать кеш при запуске сервера, используя SSM API? – gotz

+0

Создайте настраиваемый компонент весны с зависимостью от [Кэш] (https://simple-spring-memcached.googlecode.com/svn/docs/2.0.0/apidocs/com/google/code/ssm/Cache.html) и как init-метод этого метода набора компонентов, который вызывает [Cache.flush] (https://simple-spring-memcached.googlecode.com/svn/docs/2.0.0/apidocs/com/google/code/ssm/Cache. HTML # вровень()). Он должен работать так, как вы хотите. Имейте в виду, что в многосерверной среде перезапуск одного из серверов приведет к аннулированию кеша всех серверов (я предполагаю, что все серверы используют те же memcached экземпляры). – ragnor

+0

Да, все серверы используют одни и те же экземпляры кеша. Отдам это. Благодарю. – gotz