Кэш памяти с транзакциями?

Хотя я ничего не нашел в этом, я подумал, что нужно дважды проверить - поддерживает ли кэш памяти транзакции?

Если нет, и я уверен, что это наиболее вероятный ответ, то каков правильный метод работы с memcache в среде с транзакциями? Разве вам не пришлось бы читать из БД каждый раз, когда вы планируете обновление, даже если данные находятся в кеше, просто чтобы вы могли установить свои блокировки? Например, скрипт, обновляющий некоторые данные, будет выглядеть так:

  1. НАЧАТЬ; SELECT ... FOR UPDATE;
  2. Calculate ...
  3. UPDATE TABLE ...;
  4. Update cache
  5. COMMIT;

Я думаю, вам нужно обновить кеш после выполнения запроса на обновление, на случай, если вы зашли в тупик и вам нужно откатиться. Но вы также должны обновить кеш перед фиксацией, на случай, если какой-либо другой поток ожидает чтения ваших данных и может случайно обновить свой кеш, добавив еще более новые данные до вас, в результате чего ваши устаревшие данные будут перезаписаны.

Это правильная последовательность шагов? Есть ли способ избавиться от необходимости попадания в базу данных при чтении для обновления?

5
задан Tesserex 3 March 2011 в 22:18
поделиться