上緩存的一些建議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