1 回答

TA貢獻1816條經驗 獲得超4個贊
與軟件中的許多事情一樣,“視情況而定”。
關于所涉及的系統、數據被查詢、修改的頻率等方面的信息不足,無法給出具體的答案。但是因為這是作業,我們可以給出場景。
你的問題的根源是:你應該緩存數據庫中的結果嗎?
真的需要嗎?
在學術上,過度優化是可以的。您可以使用技術并了解它們的工作原理。在現實世界中,我們應該在實施之前了解對某些東西的需求在哪里。解決方案越復雜,做出正確的權衡就變得越重要。
當您要更頻繁地使用結果而不是更改結果時,緩存是最好的,并且從存儲中獲取是昂貴的。
“昂貴”可能會有所不同。以秒為單位的一項操作可能代價高昂。但以 100 毫秒為單位測量的數十、數百或數千個操作也可以如此。
你應該怎么做?
你指出了幾個缺點。最重要的是:
但是這里最大的問題是同步MongoDB下的數據和我創建的字典里的數據。
同步對于任何分布式系統來說都是最重要的事情。
如果您只有一個服務器實例,那么您如何緩存值并不重要。但是一旦開始添加實例,事情就會變得復雜。
一種常見的緩存模式是使用分布式鍵值存儲。它們允許您存儲可以在應用程序之間共享的結果——并使它們無效。
應用程序檢查存儲中是否存在密鑰。
如果是這樣,請使用它。
如果不是,則從源中獲取并為下次更新緩存。
另外,在數據需要更新時使密鑰無效。
有很多產品可供使用。Redis 很流行,memcached 很管用。但由于您使用的是 Go,請查看groupcache
:https://github.com/mailgun/groupcache。它由 Google 編寫以簡化dl.google.com
,并由 Mailgun 擴展以支持 TTL。
- 1 回答
- 0 關注
- 101 瀏覽
添加回答
舉報