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::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>
閱讀更多 天天面試題 的文章