Давайте возьмем .NET-клиента Memcached, например:
Как мы знаем, если мы хотим поместить некоторые данные на сервер кеша, мы вызываем некоторый API-интерфейс, например Cache.Add(string key, object data)
, и клиент-механизатор сериализует data
и затем отправляет его на серверы кеша. Если data
является сложным объектом (имеет большой граф объектов), процесс сериализации может быть очень медленным. Итак, я пытаюсь использовать двухуровневый кеш: Распределенный кеш и In-Memory Cache .
Код приложения всегда запрашивает кэш в памяти для кэшированных данных. Если в кэше в памяти нет кэшированных данных, он будет запрашивать у кэшированных данных кэшированные данные. Производительность может выиграть от использования кэша In-Memory, для кэша In-Memory не требуется операция сериализации, и он намного ближе к приложению.
Однако существует проблема синхронизации. Если один веб-сервер изменяет данные, он обновляет базу данных, свой кэш в памяти и распределенный кэш. Но другие веб-серверы не будут уведомлены об этом событии «обновления», поэтому их кэш в памяти не будет обновлен.
Итак, вопрос: Как другие веб-серверы могут получать уведомления, когда один веб-сервер обновляет данные (чтобы они могли обновлять свои кэши в памяти)? Спасибо!
КСТАТИ: Я хочу синхронизировать кэшированные данные в режиме "Push Sync" , то есть кэшированные данные будут обновляться только , когда они изменились Потому что в моем приложении много операций чтения, в то время как только некоторые записи.