0
活動記錄是否存在陳舊數據的問題,或者是否會愉快地執行更新?您可以更新從memcached檢索到的模型,還是必須重新提取?
說我將用戶記錄保存在memcached中,然後後臺作業更新相同的用戶記錄,所以現在memcached具有較舊版本的用戶記錄。
現在在我的web應用程序中,我從memcached中獲取用戶記錄,然後更新一個屬性並保存它,是否會拋出異常,因爲用戶記錄不是最新的?
活動記錄是否存在陳舊數據的問題,或者是否會愉快地執行更新?您可以更新從memcached檢索到的模型,還是必須重新提取?
說我將用戶記錄保存在memcached中,然後後臺作業更新相同的用戶記錄,所以現在memcached具有較舊版本的用戶記錄。
現在在我的web應用程序中,我從memcached中獲取用戶記錄,然後更新一個屬性並保存它,是否會拋出異常,因爲用戶記錄不是最新的?
ActiveRecord的內部追蹤系統應該只更新自上次保存以來修改過的字段,因此如果您更新字段A和後臺作業更新字段B,則應該沒有衝突。
雖然您在使用計數器時遇到問題。如果你的計數器C被緩存爲10,但實際上是在後臺作業12之後,並且你想再添加一個,你將保存11,而不是13。這就是爲什麼你不應該分配給計數器,而是執行一個對他們進行差異化調整。
這是錯誤的方式:
UPDATE things SET foo_count=11;
這是正確的方式:
UPDATE things SET foo_count=foo_count+1;
您可以使用ActiveRecord的increment方法做到這一點。
你會得到的唯一例外是,如果你使用的是ActiveRecord版本控制鎖,但是這似乎比它的價值更麻煩。
它不會拋出異常。就像2個用戶編輯相同的記錄並在不同的時間保存一樣。如果這種情況經常發生,你必須處理,就像你的情況一樣。 – Draiken