2016-12-30 21 views
1

У меня есть приложение, состоящее из двух веб-серверов, двух красных буферов и хранилища бэкэнд. Два веб-сервера и два redis-кэша расположены на западном и восточном побережье, чтобы оптимизировать производительность. До сих пор мне удалось подключиться к моему первому кешу, с моих веб-серверов и в моем бэкэнд-магазине. Но я ищу способ использовать Spring для передачи данных в оба красных кеша. Я настроил оба моих RedisManager следующим образом.Spring Data Store Redis - используйте несколько кешей

@Bean(name="CacheManager1") 
public RedisCacheManager cacheManager() { 
    RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate()); 
    redisCacheManager.setTransactionAware(true); 
    redisCacheManager.setLoadRemoteCachesOnStartup(true); 
    redisCacheManager.setUsePrefix(true); 
    return redisCacheManager; 
} 

@Bean(name="CacheManager2") 
public RedisCacheManager cacheManager2() { 
    RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate2()); 
    redisCacheManager.setTransactionAware(true); 
    redisCacheManager.setLoadRemoteCachesOnStartup(true); 
    redisCacheManager.setUsePrefix(true); 
    return redisCacheManager; 
} 

Теперь я попробовал несколько случайных способов кэширования в обоих местах, но именно этот способ терпит неудачу с «Cacheable не Повторяется Аннотация»

@Cacheable(cacheManager = "CacheManager1", value = "activityProfile", key = "#id") 
@Cacheable(cacheManager = "CacheManager2", value = "activityProfile", key = "#id") 
public ActivityProfile findActivityProfile(String id) { 
    return activityProfileRepository.findOne(id); 
} 

Есть ли простой способ использования Весна для этого?

+0

Как насчет конфигурации CacheResolver, которая вернет список, содержащий кеши из обоих? не пробовал, но мог работать. См. Пример [здесь] (https://jira.spring.io/browse/DATAREDIS-391?focusedCommentId=114319&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-114319) – eis

+0

вы можете создать аннотация, которая может взять массив cacheManagers –

+0

@ ObiWan-PallavJha Меня это интересует ... Но мой опыт с аннотациями ограничен. Я начал создавать новую аннотацию, и пусть мой IDE-авто генерирует некоторые элементы для меня. Но я не уверен, где бы я пошел реализовать логику, например, в наборе, чтобы установить значение в обоих кэшах. Я начинаю искать в Интернете справочники о том, как создавать аннотации, но было просто интересно, знаете ли вы о каких-либо особенно хороших руководствах. –

ответ

2

Dan Ciborowski - Смотри здесь ...

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#cache-annotations-caching

Spring ссылка объясняет, как объединить несколько Spring Cache Abstraction аннотаций (например, @Cacheable, @CachePut и т.д.) с использованием @Caching.

Таким образом, для кеширования вы можете сделать следующее.

@Caching(cacheable = {@Cacheable("CacheManager1"), @Cacheable("CacheManager2")}) 
    public ActivityProfile findActivityProfile(String id) { 
     return activityProfileRepository.findOne(id); 
    } 
+0

Спасибо, что указали мне нужное место. Но после прочтения деталей мне не ясно, какое поведение я должен ожидать от использования кэшируемого дважды. (Put и Evic, я думаю, очевидны). Знаете ли вы, будет ли он пытаться извлекать данные из всех моих кешей, но возвращать результат при получении первого ответа или проверять кеши в порядке? Нужно ли мне заказывать свои кеши по-разному в зависимости от региона, который я бы хотел использовать? –

 Смежные вопросы

  • Нет связанных вопросов^_^