我們有一個消息傳遞應用程序,它維護一個未讀/讀計數器。目前,我們將此值緩存一個小時,如果用戶點擊應用程序並且緩存過期,則會在數據庫表上進行計數以刷新緩存的值。在鍵/值存儲和db計數中維護計數器值的技巧
問題是,當大量的用戶一次到來並且過期的緩存時,這實際上非常常見,這給數據庫帶來了巨大的壓力,無法同時進行所有活動。
我想找到一種方法來在緩存中主動維護此計數器,因爲我們添加或刪除消息,以便用戶只會觸及緩存的值並且永不過期。新問題變成確保計數值保持同步,因爲添加或移除會觸發緩存更新的消息的系統可能會錯過一對,所以這兩個數字將不再同步。
一些,我想出的選項:
做一個強制刷新每隔X更新。這對活動用戶來說很好,但活動用戶較少的人可能會有不準確的計數,並且沒有緩存過期,該計數仍會持續很長時間。
有一個更新計數的後臺作業。這具有將數據庫資源花費在非活動用戶上的問題,這是低效且耗時的。
有沒有人有此類計數維護的一般建議?
你應該提到你正在使用的數據庫。 – Philipp
數據庫是MongoDB,緩存是Redis。然而,我主要是在尋找一般想法,而不是針對這兩家商店。 –