Memcached key-value存儲比Redis 採用hash 結構來做key-value 存儲的內存利用率更高。
Redis 提供了事務的功能,可以保證一系列命令的原子性
Redis 支持數據的持久化,可以將內存中的數據保持在磁盤中
Redis 只使用單核,而Memcached 可以使用多核,所以平均每一個核上Redis 在存儲小數據時比Memcached 性能更高。
Redis如何實現持久化?
RDB 持久化,將redis 在內存中的的狀態保存到硬碟中,相當於備份數據庫狀態。AOF 持久化(Append-Only-File),AOF 持久化是通過保存Redis 服務器鎖執行的寫狀態來記錄數據庫的。相當於備份數據庫接收到的命令,所有被寫入AOF 的命令都是以redis 的協議格式來保存的。
基本命令
Memcached的命令或者説通訊協議非常簡單,Server所支持的命令基本就是對特定key的添加,刪除,替換,原子更新,讀取等,具體包括 Set, Get, Add, Replace, Append, Inc/Dec 等等Memcached的通訊協議包括文本格式和二進制格式,用於滿足簡單網絡客户端工具(如telnet)和對性能要求更高的客户端的不同需求
Redis的命令在KV(String類型)上提供與Memcached類似的基本操作,在其它數據結構上也支持基本類似的操作(當然還有這些數據結構所特有的操作,如Set的union,List的pop等)而支持更多的數據結構,在一定程度上也就意味着更加廣泛的應用場合
除了多種數據結構的支持,Redis相比Memcached還提供了許多額外的特性,比如Subscribe/publish命令,以支持發佈/訂閲模式這樣的通知機制等等,這些額外的特性同樣有助於拓展它的應用場景
Redis的客户端-服務器通訊協議完全採用文本格式(在將來可能的服務器間通訊會採用二進制格式)
事務
redis通過Multi / Watch /Exec等命令可以支持事務的概念,原子性的執行一批命令。在2.6以後的版本中由於添加了對Script腳本的支持,而腳本固有的是以transaction事務的方式執行的,並且更加易於使用,所以不排除將來取消Multi等命令接口的可能性Memcached的應用模式中,除了increment/decrement這樣的原子操作命令,不存在對事務的支持
數據備份,有效性,持久化等
memcached不保證存儲的數據的有效性,Slab內部基於LRU也會自動淘汰舊數據,客户端不能假設數據在服務器端的當前狀態,這應該説是Memcached的Feature設定,用户不必太多關心或者自己管理數據的淘汰更新工作,當然是否適合你的應用,取決於具體的需求,它也可能成為你需要精確自行控制Cache生命週期的一個障礙
Memcached也不做數據的持久化工作,但是有許多基於memcached協議的項目實現了數據的持久化,例如memcacheDB使用BerkeleyDB進行數據存儲,但本質上它已經不是一個Cache Server,而只是一個兼容Memcached的協議key-valueData Store了
Redis可以以master-slave的方式配置服務器,Slave節點對數據進行replica備份,Slave節點也可以充當Read only的節點分擔數據讀取的工作
沒有留言:
張貼留言