Разница между одиночным кешем, мульти кешем и кешем присваивания по сравнению с аннотациями весеннего кеша

Я пытаюсь понять простой Spring Memcached, но застрял с нижеприведенным.

В чем разница между:

  1. @ReadThroughSingleCache, @ReadThroughMultiCache и @ReadThroughAssignCache
  2. @UpdateSingleCache, @UpdateMultiCache и @UpdateAssignCache
  3. @InvalidateSingleCache, @InvalidateMultiCache и @InvalidateAssignCache

Также как работает обновление. Если я сделаю обновление для пространства имен с определенным ключом, он пойдет и выполнит все методы чтения * кэша в том же пространстве имен и с использованием того же ключа. Если да, то будет ли это работать для нескольких серверных приложений.

Например, в определенном сценарии очки пользователя (для чего-то) кешируются приложение 1

@ReadThroughSingleCache(namespace="userPoints")
public Integer getUserPoints(@ParamterKeyValueProvide String userId){
}

В другом сценарии из другого приложения (может быть фоновый планировщик) вызывается следующий метод: Приложение 2

UpdateThroughSingleCache(namespace="userPoints")
public void updateUserPoints(@ParameterKeyValueProvider String userId, Integer newPoints)
{
      //make database update
}

Мой вопрос заключается в том, что если в пространстве имен ("userPoints") была запись в кеше для userId("1234"), изначально равная 50 точкам, а метод обновления вызывается с помощью ("1234",100), то как кэш узнает логику о том, что Запись для "1234" должна быть обновлена ​​на 100 баллов.

Либо он должен использовать возвращаемое значение и обновить его старым значением (тогда тип возвращаемого значения должен быть изменен), либо, если обновление было "записано через", метод read должен быть вызван с прямой логикой просмотра базы данных, а затем обновлением кеш... но как приложение 2 уведомляет приложение 1 об обновлении.

1 ответ

Решение

Существует 3 группы кеширующих аннотаций в зависимости от количества обрабатываемых ключей:

  • * AssignCache - ключ кэша является постоянным и не зависит от параметров метода, обычно используется для метода без параметра, т.е. getAllUsers ()
  • * SingleCache - ключ кеша создается с использованием аннотированных параметров метода, результат сохраняется под одним ключом, параметр метода типа List нельзя использовать для генерации ключа кеша
  • *MultiCache - кэш создается с использованием параметров аннотированного метода, один из параметров должен иметь тип List, результат также должен быть List, каждый элемент из списка List хранится в выделенном ключе кэша.

В SSM нет прямой связи между Приложением 1 и Приложением 2. Для правильной работы оба приложения должны использовать одну и ту же конфигурацию Simple Spring Memcached, включая серверы memcached и конфигурацию провайдера, поэтому они будут использовать одни и те же серверы memcached. Приложения могут быть развернуты на отдельных серверах. Когда одно приложение помещает ключ в memcached, используя ReadThroughSingleCache или UpdateThroughSingleCache, другое может получить к нему доступ, используя ReadThroughSingleCache. Сигнатура метода обновления должна использовать параметр метода в качестве нового значения:

@UpdateThroughSingleCache(namespace="userPoints")
public void updateUserPoints(@ParameterKeyValueProvider String userId, @ParameterDataUpdateContent Integer newPoints)
{
      //make database update
}

Если вы хотите использовать возвращаемое значение для обновления, аннотируйте метод с помощью @ReturnDataUpdateContent.

Другие вопросы по тегам