Можете ли вы обновить модель, которая была извлечена из memcached, или вам нужно повторно? - PullRequest
0 голосов
/ 21 октября 2011

Есть ли у активной записи проблемы с устаревшими данными, или она с радостью выполнит обновление независимо?

Скажем, я сохраняю свою запись пользователя в memcached, а затем фоновое задание обновляет ту же запись пользователя, поэтому теперь memcachedимеет более старую версию пользовательской записи.

Теперь в моем веб-приложении я получаю пользовательскую запись из memcached, обновляю свойство и затем сохраняю его, будет ли возникать исключение, потому что пользовательская запись несамая актуальная?

1 Ответ

1 голос
/ 21 октября 2011

Внутренняя система отслеживания ActiveRecord должна обновлять только те поля, которые были изменены с момента последнего сохранения, поэтому если вы обновите поле A и поле фоновых обновлений задания B, тогда не должно быть конфликтов.

У вас есть проблемыкогда вы используете счетчики, хотя.Если у вас есть счетчик C, который был кэширован как 10, но на самом деле 12 после фонового задания, и вы хотите добавить еще один, вы сохраните 11, а не 13. Именно поэтому вам никогда не следует назначать счетчики, а вместо этого выполнятьвместо них используется дифференциальная регулировка.

Это неправильный путь:

UPDATE things SET foo_count=11;

Это правильный путь:

UPDATE things SET foo_count=foo_count+1;

Вы можете сделать это, используя increment метод ActiveRecord.

Единственное исключение, которое вы получите, если вы используете блокировку версий ActiveRecord, но это, кажется, больше проблем, чем стоит.

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