多級緩存設計的學習筆記

多級緩存設計的學習筆記

整理一下實際工程中用到過的一些緩存,從客戶端到服務端。

1. 客戶端緩存

頁面緩存

- HTML5中使用本地緩存localStorage
- 開啓離線緩存步驟:1. 準備資源列表清單文件;2. 頁面中添加manifest屬性,指定緩存清單文件的路徑

瀏覽器緩存

- 瀏覽器與服務器約定的規則

APP上的緩存

-  APP可以將內容緩存在內存、文件或本地數據庫中
-  數據庫緩存方法:存放文件相關信息(URL、路徑、下載時間、過期時間),需要注意清理機制。
-  IOS開發中,SDWebImage-圖片緩存框架

2. CDN

  • 將圖片、JS、音頻等放在CDN上,能提高訪問速度、降低成本、也提高了系統的吞吐量。筆者就遇到過一次因爲某個活動頁面的圖片鏈接沒有替換成CND鏈接,用了應用內鏈接,上線直接沖垮網站的情況。

CDN方案

  • 國內很多CDN廠商
  • Amazon CloudFront,不過看了下cn區的還沒有這個服務。

3. 接入層緩存,Nginx

  • Nginx能有效地直接處理靜態內容,適合給前端服務器當緩存。

Nginx 緩存配置

  1. 在http配置快中添加proxy_cache_path,配置緩存所在文件系統路徑、緩存區名稱、大小。
  2. 配置proxy_cache
  • 一個簡單的中文參考: https://leokongwq.github.io/2016/11/25/nginx-cache.html

4. 應用層緩存

4.1 堆內緩存

  • Guava cache, 簡單易用
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

private final LoadingCache<String, Product> productCache = CacheBuilder.newBuilder()
        .softValues()
        .expireAfterWrite(TimeUtils.FIVE_MINUTE_IN_SECONDS, TimeUnit.SECONDS)
        .build(
                new CacheLoader<String, Product>() {
                    @Override
                    public Product load(String productId) throws Exception {
                        return productDao.getByProductId(productId);
                    }
                }
        );

4.2 堆外緩存

Ehcache的 BigMemory

4.3 本地磁盤緩存

local redis cache

4.4 分佈式緩存

Redis

  • 需要學習的內容有很多,包括常用命令、數據結構、主從複製、持久化、高可用、集羣、擴容、內存管理、集羣監控等

Memcached

  • 包括 安裝使用、內存管理、緩存策略、分佈式集羣、分佈式算法等

5. 數據庫緩存

MySQL查詢緩存

查看 Query Cache 是否合理

    - SHOW VARIABLES LIKE '%query_cache%' 
    - SHOW STATUS LIKE '%cache%'

InnoDB 緩存性能

    - SHOW VARIABLES LIKE '%innodb_buffer_pool%' 
    - SHOW STATUS LIKE '%innodb_buffer_pool_read%'
    - 緩存命中率: (Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads)/Innodb_buffer_pool_read_requests*100%
    - 根據命中率調節innodb_buffer_pool_size

大型網站的系統架構示意圖

前端頁面緩存
    → Web服務器集羣
        → 分佈式文件系統
        → 動態頁面組件緩存
        → 數據庫接入層 → 數據庫集羣
        → 數據緩存、分佈式緩存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章