我有一個帶有多個計數器緩存的數據庫模式。我不想讓計數器緩存跨越很多表,我想要一個名爲user_counters的表以及所有各種計數器緩存。我想更新從服務對象,這些緩存使用這樣的方法:Rails計數器緩存
def update_user_counter(column, user_id)
UserCounter.increment_counter(column, user_id)
end
但是,對相關用戶的UserCounter記錄很可能不會有相同的ID的用戶。我想要做的是這樣的:
def update_user_counter(column, user_id)
UserCounter.increment_counter(column, UserCounter.where('user_id = "#{user_id}"')
end
任何想法,我怎麼能做到這一點?謝謝!!
出於好奇:爲什麼?在編寫所有新代碼時,這裏有一些嚴重的技術債務,那麼這個模式提供了什麼優勢? – Matchu 2013-05-08 03:34:41
很好的問題......這個user_counters表大約有10個計數器緩存列,用於許多頁面瀏覽。因此,不是運行10個單獨的查詢來獲取10個緩存計數器值中的每一個,我就可以運行1個查詢。我沒有任何其他緩存策略正在運行(例如,memcached),所以這似乎是最有效的替代方法。 – 2013-05-08 03:43:09
你有沒有考慮過在數據庫中使用觸發器來實現這個功能?是的,Rails認爲數據庫中不應該有任何邏輯,但有時Rails是愚蠢和短視的。 – 2013-05-08 03:59:11