1. 程式人生 > >MemCache與redis

MemCache與redis

以下內容為個人理解所得,如要轉載,請標明出處:

 

像專案中首頁的大廣告和商品類目這些不需要經常修改的資料,如果使用者每次重新整理頁面的時候都要去資料庫中查詢,這樣會浪費資源和增加資料庫的壓力

所以我們想當把這些資料新增到一個快取中,使用者去訪問的時候,先去快取中查詢,如果命中失敗,再去資料庫中查詢,然後把查詢到的資料新增到快取中。

目前比較主流的快取技術有RedisMemcached,單純從快取命中的角度來說,Memcached要高一些,可Redis和Memcache的差距其實並不大,但Redis提供的功能更加強大一些,讀寫速度也很快。所以我們選用了Redis來快取資料。

redis把資料以key—value的形式快取到記憶體中,並提供了多種資料儲存型別(String、Hash、list、Set、SortedSet),還自身提供了持久化功能(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

,Redis並沒有選擇Libevent 。Libevent 為了迎合通用性,使得他的底層程式碼龐大而Redis的底層程式碼還不到libevent的1/3 ,

但是也犧牲了redis通用性,現在在redis的官網上,他說明了redis只能在Liuse上使用。

CAS 問題。CAS 是Memcached 中比較方便的一種防止競爭修改資源的方法。CAS 實現需要為每個cache key設定一個隱藏的cas token ,

cas 相當value 版本號,每次settoken 需要遞增,因此帶來CPU和記憶體的雙重開銷,雖然這些開銷很