緩存的那些事

上緩存的一些建議html

1.首先明確是否是必定要上緩存,當前架構的瓶頸在哪裏,若瓶頸真是數據庫操做上,再繼續往下看。redis

2.明確memcached和redis的區別,到底要使用哪一個。前者終究是個緩存,不可能永久保存數據(LRU機制),支持分佈式,後者除了緩存的同時也支持把數據持久化到磁盤等,redis要本身去實現分佈式緩存(貌似最新版本的已集成),本身去實現一致性hash。由於不知道大家的應用場景,很差說必定要用memcache仍是redis,說不定用mongodb會更好,好比在存儲日誌方面。mongodb

3.緩存量大但又不常變化的數據,好比評論。shell

4.你的思路是對的,清晰明瞭,讀DB前,先讀緩存,若是有直接返回,若是沒有再讀DB,而後寫入緩存層並返回。數據庫

5.考慮是否須要主從,讀寫分離,考慮是否分佈式部署,考慮是否後續水平伸縮。緩存

6.想要一勞永逸,後續維護和擴展方便,那就將現有的代碼架構優化,按你說的替換數據庫組件須要改動大量代碼,說明當前架構存在問題。能夠利用現有的一些框架,好比SpringMVC,將你的應用層和業務層和數據庫層解耦。再上緩存以前把這些作好。架構

7.把讀取緩存等操做作成服務組件,對業務層提供服務,業務層對應用層提供服務。框架

8.保留原始數據庫組件,優化成服務組件,方便後續業務層靈活調用緩存或者是數據庫。分佈式


9.不建議一次性全量上緩存,最開始不動核心業務,能夠將邊緣業務先換成緩存組件,一步步換至核心業務。
10.memcached

刷新內存,以memcached爲例,新增,修改和刪除操做,通常採用lazy load的策略,即新增時只寫入數據庫,並不會立刻更新Memcached,而是等到再次讀取時纔會加載到Memcached中,修改和刪除操做也是更新 數據庫,而後將Memcached中的數據標記爲失效,等待下次讀取時再加載。

 

參考:

https://www.zhihu.com/question/27738066

https://coolshell.cn/articles/17416.html

相關文章
相關標籤/搜索