2011-10-21 34 views
0

活動記錄是否存在陳舊數據的問題,或者是否會愉快地執行更新?您可以更新從memcached檢索到的模型,還是必須重新提取?

說我將用戶記錄保存在memcached中,然後後臺作業更新相同的用戶記錄,所以現在memcached具有較舊版本的用戶記錄。

現在在我的web應用程序中,我從memcached中獲取用戶記錄,然後更新一個屬性並保存它,是否會拋出異常,因爲用戶記錄不是最新的?

+0

它不會拋出異常。就像2個用戶編輯相同的記錄並在不同的時間保存一樣。如果這種情況經常發生,你必須處理,就像你的情況一樣。 – Draiken

回答

1

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版本控制鎖,但是這似乎比它的價值更麻煩。

相關問題