memcache和redis的對比

 1.memcachephp

a.Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。
其守護進程(daemon )是用C寫的,可是客戶端能夠用任何語言來編寫,並經過memcached協議與守護進程通訊。 b.Memcached的鍵key通常是字符串,該值不能重複;value能夠放入字符串、數組、數值、對象、布爾,二進制數據和圖片視頻 c.Memcached默認服務端口是11211

1.1 php和memcache的連接css

$mem = new Memcache();

$mem->connect("127.0.0.1", 11211);
//Memcache::set方法有四個參數,第一個參數是key,第二個參數是value,第三個參數可選,表示是否壓縮保存,第四個參數可選,用來設置一個過時自動銷燬的時間。
$mem->set('test','123',0,60);

//Memcache::add方法的做用和Memcache::set方法相似,區別是若是 Memcache::add方法的返回值爲false,表示這個key已經存在,而Memcache::set方法則會直接覆寫。

$mem->add('test','123',0,60);

//Memcache::get方法的做用是獲取一個key值,Memcache::get方法有一個參數,表示key。

$mem->get('test');//輸出爲'123'

//Memcache::replace 方法的做用是對一個已有的key進行覆寫操做,Memcache::replace方法有四個參數,做用和Memcache::set方法的相同。

$mem->replace('test','456',0,60);

//Memcache::delete方法的做用是刪除一個key值,Memcache::delete方法有兩個參數,第一個參數表示key,第二個參數可選,表示刪除延遲的時間。

$mem->delete('test',60);

 

1.2 對於內存緩存,比較經常使用的有兩種memcache和memcached擴展,而memcache和memcached的守護進程mencached同名,容易混淆html

a、Memcache是徹底在PHP框架內開發的redis

b、Memcached是使用libmemcached的算法

c、Memcached會比memcache多幾個方法,使用方式上都差很少數據庫

d、memcache是原生實現的,支持OO和非OO兩套接口並存,而memcached是使用libmemcached,只支持OO接口。更多關於他們的區別,數組

      請參考:http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html

      memcached ,還有個值得陳讚的地方,就是flag不用再操做的時候設置了,能夠經過一個統一的setOption()方法實現.緩存

 

1.2經過修改php.ini,能夠把session的值放入memcache服務器中安全

  session.save_handler = files改爲session.save_handler = memcached服務器

  session.save_path = "N;MODE;/path"改爲 session.save_path = "tcp://127.0.0.1:11211"

 

2. redis介紹

Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。

Redis 與其餘 key - value 緩存產品有如下三個特色:

  • Redis支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載進行使用。
  • Redis不只僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。(Stirng(字符串), List(列表), Hash(字典), Set(集合), Sorted Set(有序集合))
  • Redis支持數據的備份,即master-slave模式的數據備份。

2.1 PHP操做redis

//實例化redis
    $redis = new Redis();
    //鏈接
    $redis->connect('127.0.0.1', 6379);
    //檢測是否鏈接成功
    echo "Server is running: " . $redis->ping();
    // 輸出結果 Server is running: +PONG
1.STring(字符串類型)
//設置一個字符串的值
$redis->set('cat',111);
//獲取值
$redis->get('cat');
//重置值
$redis->set('cat',222);

2. List(列表)
//存數據到列表中
$redis->lpush('list','html');
$redis->lpush('list','css');
$redis->lpush('list','js');
//獲取列表全部值
$redis->lrange(list',0,-1);
//從右側加入一個
$redis->rpush('list','php');
//從左側彈出一個
$redis->lpop('list');
//從右側彈出一個
$redis->rpop('list');

3.Hash(字典)
//設置值
$redis->hset('hash','cat','cat');
$redis->hset('hash','cat','cat2');
//獲取
$redis->hget('hash','cat');
//獲取全部的key值
$redis->hkeys('hash');
//獲取一個哈市,順序是隨機的
$redis->hvals('hash');
//獲取hash中全部的key和value 順序隨機
$redis->hgetall('hash');
//獲取hash中key的數量
$redis->hlen('hash');
//刪除hash中的一個key,
$redis->hdel('hash','cat');

4.Set(集合)
//添加一個元素
$redis->sadd('set','cat');
$redis->sadd('set','dog');
//獲取全部元素
$redis->smembers('set');
//刪除集合中的value
$redis->srem('set','cat');
//判斷元素是不是set成員
$redis->sismember('set','dog');
//查看集合成員數量
$redis->scard('set');
//
移除並返回集合中的一個隨機元素(返回被移除的元素)
$redis->spop('set');
5.Sorted Set(有序集合)
$redis->zadd('set',1,'cat');
$redis->zadd('set',2,'dog');
//獲取全部元素
$redis->zrange('set',0,-1);
//獲取score值
$redis->zscore('set','dog');
//元素個數
$redis->zcard('set');
//刪除指定成員
$redis->zrem('set','cat');
//返回介於min和max之間的個數
$redis->zcount('set',1,3);
//返回有序集合中score介於min和max之間的值
$redis->zrangebyscore('set',1,3);



 

3.memcache 和redis比較

3.1  性能方面

因爲Redis只使用單核,而Memcached可使用多核

因此在比較上,平均每個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,可是比起Memcached,仍是稍有遜色。說了這麼多,結論是,不管你使用哪個,每秒處理請求的次數都不會成爲瓶頸。

3.2 內存空間和數據量大小

 MemCached能夠修改最大內存,採用LRU算法。Redis增長了VM的特性,突破了物理內存的限制。

3.3 數據類型:操做便利上

MemCached數據結構單一,僅用來緩存數據,而Redis支持更加豐富的數據類型,也能夠在服務器端直接對數據進行豐富的操做,這樣能夠減小網絡IO次數和數據體積。

3.4 可靠性上:

  MemCached不支持數據持久化,斷電或重啓後數據消失,但其穩定性是有保證的。Redis支持數據持久化和數據恢復,容許單點故障,可是同時也會付出性能的代價。

  Memcached只是個內存緩存,對可靠性無要求;而Redis更傾向於內存數據庫,所以對對可靠性方面要求比較高

  關注數據持久化和主從複製時,只有redis擁有這兩個特性

3.5 應用場景

     Memcached:動態系統中減輕數據庫負載,提高性能;作緩存,適合多讀少寫,大數據量的狀況(如人人網大量查詢用戶信息、好友信息、文章信息等)。
     Redis:適用於對讀寫效率要求都很高,數據處理業務複雜和對安全性要求較高的系統(如新浪微博的計數和微博發佈部分系統,對數據安全性、讀寫要求都很高)。

3.6 運行環境不一樣:
    redis目前官方只支持LINUX 上去行,從而省去了對於其它系統的支持,這樣的話能夠更好的把精力用於本系統 環境上的優化,雖而後來微軟有一個小組爲其寫了補丁。

    可是沒有放到主幹上

參考資料:

http://blog.csdn.net/sunmenggmail/article/details/36176029

http://www.cnblogs.com/work115/p/5584646.html

相關文章
相關標籤/搜索