Цитата:
Сообщение от etc
Не надо из мемкеша ничего выбрасывать, нужно изменять одновременно с данными в базе. А актуальность и синхронизация данных будет обеспечена прямыми руками. Если оные не есть прямые, тут ничего уж не поделаешь.
|
В документации к мемкэшу написано, что выставление бессрочного срока хранения данных все равно не гарантирует их бессрочного хранения. Это означает, что мы все равно при обращении клиента к серверу проверяем существование информации в кэше и должны быть готовы ее вычислить заново. Т.е., этот метод все равно будет существовать.
Теперь по логике работы. Допустим, в кэше хранится профиль фермы пользователя в виде объекта. Пользователь купил ослика. От клиента поступил запрос на покупку ослика, по итогам которого сервер отдал клиенту обновленную информацию - добавленное жывотное, обновленная сумма на счету, обновленный рейтинг, клиент получил эти данные и у себя их учел.
Параллельно с отправкой данных клиенту мы должны обеспечить целостность данных.
Я сбрасываю профиль фермы из кэша, он будет автоматически заполнен при следующем обращении к ней методом, который указан в первом абзаце. Имею незначительную избыточность в вычислениях, но простоту и надежность.
В Вашей реализации Вы, на сколько я понимаю, обновляете объект профиля фермы и записываете его заново. Т.е., Вы немного экономите на вычислениях, но имеете более сложный сервер.
Вопрос выбора.
Кстати, я тут подумал, что мне пришлось пойти своим путем и по вполне объективным причинам. Иногда есть потребность одновременно внести изменения, скажем, в тысячу-другу профилей ферм. Например, в стойла вернулись арендованные на сутки ослики. Пересчитывать все эти профили одной задачей - достаточно трудоемко. Проще их сбросить, чтобы потом они постепенно обновились в кэше по мере того, как они будут запрошены.