1. 程式人生 > >NoSQL資料庫memcache和redis區別()

NoSQL資料庫memcache和redis區別()

在web後臺發開面試中,經常會被問道memcache和redis的區別和使用情況。

其中memcache和redis都是基於記憶體儲存的快取系統,儲存形式key--value鍵值對的形式。

區別:

(1)都是k-v模式,但是memcache只是string字串型別,而redis還可以是hashmap,set ,zset ,list等資料結構。

(2)redis可以實現持久化儲存,memcache不能實現。

(3)底層的實現不同,與客戶端的通訊協議不同

針對上面的三點不同,主要介紹一下對redis的理解:

(1)redis 特殊資料結構的應用場景:

  •  hahsmap:可以將使用者的會話session,購物車以hashmap存,提高響應的速度;
  • list :可以解決資料一致問題,爭搶的資源。將不同使用者的對同一資料的操作,放在訊息佇列中,依次解決。
  • set: 集合交集,例如:求公同的好友。
  • zset(有序集合):計算,可以實現排行榜
  • string :可以快取頁面
(2)持久化儲存:

redis有二種持久化儲存的方法:RDB和AOF

Rdb(快照方式):在一定的間隔內將資料以快照的形式存在檔案中,預設的dump rdb形式,缺陷:可能宕機的時候儲存的快照不是最新的;

aof:redis將每一個寫命令通過write追加到檔案中,當redis重啟會重新執行這些寫命令,在記憶體中重建。可能os會在核心快取write做的修改,可能不能立即寫入檔案,可以修改配置檔案redis.conf。缺陷:可能執行了很多無用的命令,(這個問題已經改進了)

(3)虛擬記憶體:

當redis的記憶體不足時,會將不經常用的k-v交換在虛擬swap中,並將其從記憶體中刪除。當key不存在記憶體中,則需要在swap中載入相應的資料並返回。

(4)資料淘汰策略

redis有很多淘汰策略,其中LRU:表示在設定過期時間的集合中,刪除一個最近沒用的資料.(memcache也有淘汰機制,這裡只能講了redis)

$m=new  redis();

$m->connect('ip','port');

$m->close();

$m->set('key',$value,時間 )

$m->get('key')

$m->detele('key');

$r=new redis();

$r->connect('','');

$r->persist('key');

string:

$r->set('key',$value,時間 )

$r->get('key')

$r->detele('key');

list

lpush/rpush(,)

lGet(,)

....

存在一點問題:

http://www.cnblogs.com/dasn/articles/5367436.html

http://mp.weixin.qq.com/s/SCohQdLRinZzhh_EsS2eGw?ref=myread

已經併發使用的實踐,這個可以自己完成