Memcache с транзакциями? - PullRequest
       5

Memcache с транзакциями?

5 голосов
/ 04 марта 2011

Несмотря на то, что я ничего не смог найти, я подумал, что должен перепроверить - поддерживает ли memcache транзакции?

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

  1. BEGIN;ВЫБРАТЬ ... ДЛЯ ОБНОВЛЕНИЯ;
  2. Вычислить ...
  3. ТАБЛИЦА ОБНОВЛЕНИЙ ...;
  4. Обновление кэша
  5. COMMIT;

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

Это правильная последовательность шагов?Есть ли способ, чтобы не обновлять БД на чтение?

Ответы [ 2 ]

5 голосов
/ 04 марта 2011

В Memcache есть оператор CAS (Check And Set - или Compare And Swap), который может вам помочь. В руководстве по PHP есть некоторая документация Memcached :: cas , но она также должна поддерживаться в других библиотеках и языках.

0 голосов
/ 04 марта 2011

Memcached не поддерживает транзакции в этом смысле, хотя его операции являются атомарными. Вы можете использовать механизм транзакций базы данных и обновлять кеш вручную (как вы указали), или использовать оболочку с транзакциями, например this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...