Я хотел бы знать, как лучше подходить для аннулирования / обновления объектов кэша.
Предпосылки
- Наличие удаленного сервера memcached (служит кешем для нескольких приложений)
- Все серверы размещены на Azure (аффинные регионы, одни и те же центры обработки данных).
- Размер объекта кэша варьируется от 200 байт до 50 килобайт
Подход 1 (хранить в кеше как можно скорее)
- Объект A создан -> сохранить в базе данных и сохранить в кэше
- Объект A запрошенный клиентом -> проверить кеш на наличие, в противном случае получить из базы данных и сохранить в кеше
- Объект А обновляется -> хранить в базе данных, хранить в кэше
Подход 1 кажется более простым. Если что-то создано, поместите в кэш как можно скорее. Независимо от того, кому-то это понадобится.
Подход 2 (хранилище ленивых кешей)
- Объект А создан -> сохранить в базе данных
- Объект A запрошенный клиентом -> проверить кеш на наличие, в противном случае получить из базы данных и сохранить в кеше
- Объект А обновляется -> хранить в базе данных, удалять ключ в кеше
Подход 2, кажется, больше учитывает память. При таком подходе в кеш попадают только запрашиваемые элементы.
Вопрос 1: С точки зрения производительности, что будет лучшим подходом? Память ни CPU пока не в счет.
Вопрос 2: Являются ли мои мысли своего рода преждевременной оптимизацией?
Вопрос 3: Есть еще мысли? Другие подходы?