MemCache與redis
以下內容為個人理解所得,如要轉載,請標明出處:
像專案中首頁的大廣告和商品類目這些不需要經常修改
的資料,如果使用者每次重新整理頁面的時候都要去資料庫中查詢,這樣會浪費資
源和增加資料庫的壓力
。
所以我們想當把這些資料新增到一個快取
中,使用者去訪問的時候,先去快取中查詢
,如果命中失敗,再去資料庫中查詢,然後把查詢到的資料新增到快取中。
目前比較主流的快取技術有Redis
和Memcached
,單純從快取命中的角度來說,Memcached要高一些,可Redis和Memcache的差距其實並不大,但Redis提供的功能更加強大一些,讀寫速度也很快
。所以我們選用了Redis來快取資料。
持久化功能(2種:RDB、AOF)
,還可以把資料備份到磁碟中(redis的SAVE命令用於建立當前 redis資料庫的備份),防止redis宕機時的資料丟失。(會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(
主從)同步
)。
1,儲存方式不同
memecache 把資料全部存在記憶體之中,資料不能超過記憶體大小;
redis有部份存在硬碟上,這樣能保證資料的永續性,支援資料的持久化
2,資料支援型別不同
Redis支援的資料型別比memcache多的多
Redis支援的資料型別: String、Hash、list,陣列,集合
Memcache僅僅支援簡單資料型別 ,複雜資料型別需要應用自己處理
他們都是以key-value的型別儲存資料
3.為什麼redis比 Memcached要快?
Memcached 完全基於記憶體,而Redis
具有持久化儲存特性,即使是非同步的,Redis
也不可能比Memcached
快。
Memcached
底層用的是Libevent
Libevent
。Libevent
為了迎合通用性,使得他的底層程式碼龐大而Redis的底層程式碼還不到libevent的1/3 ,
但是也犧牲了redis通用性,現在在redis的官網上,他說明了redis只能在Liuse上使用。
CAS
問題。CAS
是Memcached
中比較方便的一種防止競爭修改資源的方法。CAS
實現需要為每個cache key設定一個隱藏的cas token
,
cas
相當value
版本號,每次set
會token
需要遞增,因此帶來CPU和記憶體的雙重開銷,雖然這些開銷很