02.27 Memcache 基礎知識大補

Memcache

是一套分佈式的高速緩存系統,也即:高性能的分佈式的內存對象緩存系統,被許多網站使用以提升網站的訪問速度。

服務器互不通信,由於程序實現分佈式,考慮算法分散存儲壓力和考慮算法的命中率。

程序執行流程如下:

  • 先檢查客戶端的請求數據是否在memcached中
  • 如有,直接把請求數據返回,不再對數據庫進行任何操作
  • 如果請求的數據不在memcached中,就去查數據庫
  • 從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中,需要程序根據需求來實現
  • 更新數據庫,同時更新memcached中的數據,保證一致性
  • 當分配給memcached內存空間用完之後,會使用LRU(最近最少使用)策略加上到期失效策略,失效數據首先被替換,然後再替換掉最近未使用的數據。

通過在內存裡維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,

包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,

然後從內存中讀取,從而大大提高讀取速度。

Memcached是以守護程序(監聽)方式運行於一個或多個服務器中,隨時會接收客戶端的連接和操作。

Memcache 特點

  • 只要計算機內存足夠大,在 Memcached中可以保存無限的item數據。
  • 可以分多個端口開啟多個Memcached進程 ,使用更多的內存。
  • 最大30天的數據過期時間。
  • 單個item最大數據是1MB。
  • 最大同時連接數是200,最大軟連接數是1024。
  • 一種無阻塞的socket通信方式服務,基於libevent庫,讀寫速度非常快。
  • 有服務器端和客戶端,可以配置多個服務器端和客戶端。
  • 小規模的數據分佈式平臺是十分有效果的。
  • 是鍵值隊(KV),key默認最大不能超過128個字 節,value默認大小是1M


Memcache 基礎知識大補


Memcache 常用接口

Memcache客戶端包含兩組接口,一組是面向過程的接口,一組是面向對象的接口。

  • Memcache::connect -- 打開一個到Memcache的連接
    • Memcache::pconnect -- 打開一個到Memcache的長連接
    • Memcache::close -- 關閉一個Memcache的連接
    • Memcache::set -- 保存數據到Memcache服務器上
    • Memcache::get --提取一個保存在Memcache服務器上的數據


    Memcache 應用

    為了緩解數據庫的壓力,讓Memcache作為一個緩存區域,把部分信息保存在內存中,在前端能夠迅速的進行存取。關鍵點:就是集中在如何分擔數據庫壓力和進行分佈式。

    ⑴主要功能:

    • 服務器參數監控:STATS、SETTINGS、ITEMS、SLABS、SIZES實時刷新;
    • 服務器性能監控:GET、DELETE、INCR、DECR、CAS等常用操作命中率實時監控;
    • 支持數據遍歷,方便對存儲內容進行監視;
    • 支持條件查詢,篩選出滿足條件的KEY或VALUE;
    • 數組、JSON等序列化字符反序列顯示;
    • 兼容memcache協議的其他服務,如Tokyo Tyrant (遍歷功能除外);
    • 支持服務器連接池,多服務器管理切換方便簡潔。

    ⑵應用

    • 數據緩存
    • 存儲session
    • 短信驗證碼存儲
    • 緩解數據庫壓力,提高交互速度
    • 數據庫主從同步中繼

    Spring boot 繼承Memcache

    • 添加依賴-pomx 包中
    <code><dependency><groupid>net.spy/<groupid><artifactid>spymemcached/<artifactid><version>2.12.2/<version>/<dependency>/<code>


    • 添加配置
    <code>memcache.ip=192.168.0.161/<code>


    • 設置配置對象-MemcacheSource 接收配置信息
    <code>@Component@ConfigurationProperties(prefix = "memcache")public class MemcacheSource {          ......          }/<code>


    • 使用Memcache
    <code>MemcachedClient memcachedClient = memcachedRunner.getClient();memcachedClient.set("testkey",1000,"666666");System.out.println("20200227 "+memcachedClient.get("testkey").toString());}}/<code>


    分享到:


    相關文章: