memcache與redis雜談

php項目下的緩存控制

客戶端向服務端請求php頁面的過程當中,服務端是可控的。
可控的纔可優化,優化的重點,便是緩存優化。

試想?數據存儲在DB中,訪問DB就要讀取硬盤數據,但若是須要數據的速度>>硬盤最大的讀寫速度,
就會產生IO瓶頸。

那麼,使用內存緩存數據結果集,讓用戶首先讀取緩存,未果則從DB中讀取。
如此,就能提升數據響應的速度,也保護了數據源。

php雖開啓shmop擴展可管理內存,但所能管理的內存大小是有限的。

纔有大爲流行的NOSQL:
memcache  高性能的分佈式內存緩存服務器   
(分佈式配置:1.有多個memcache服務端;2.開啓php相應擴展,經過addServer()便可實現。底層經過對key的hash取餘來標識服務器,所以代碼實現上,不要改變存取前的服務器的順序,不然可能出現獲取不到值的狀況)
redis     高性能的內存緩存服務器          
(主從配置:master主服務器執行修改操做,多個slave(只讀)鏈接master,在首次全量複製後,增量更新數據到自身。若是slave斷了,從新鏈接master時,會自動全量複製)

MEMCACHE

  1. 以key-value的方式存儲
  2. key可達250B,value可達1M
  3. value是以字符串的形式保存的:php

    php標量數據類型,保存時會隱式轉換爲字符串;
    php其餘數據類型, 保存時自動序列化,取出時自動反序列化. //該過程是php的memcache擴展開啓後,底層實現的
  4. item過時時間是時間戳時,無限制;以s爲單位時,不能超過30天的秒數
  5. 不能持久化,要的就是速度

注意事項redis

  • clipboard.png
  • clipboard.png
  • clipboard.png

緩存

memcacheredis,最大區別在於持久化(即數據可否保存在硬盤上).
redis因其多樣的數據結構,而知足更多的業務需求,但memcache的讀取速度更快些.服務器

數據結構

REDIS

  1. 支持豐富的數據結構(在此先不展開該方面的討論)分佈式

    經常使用項:string,hash,list,set,sortedset                //redis自己就實現了雙向列表,list還可模擬出隊列,堆棧的數據結構
  2. value值可達512M
  3. 可持久化:性能

    • 快照持久化(SNAPSHOTTING)
      必定時間內必定數量的key值的改變,就會全量複製redis內存管理的數據到硬盤.

    clipboard.png

    • 精細持久化(AOF)
      用來保存每次執行的命令.開啓後,每秒保存一次。見下圖的英文註釋

    clipboard.png

    clipboard.png

注意事項優化

  • clipboard.png
  • clipboard.png
相關文章
相關標籤/搜索