memcached
memcached 介紹
Memcache官網:http://memcached.org/
memcache本身沒有像redis所具備的數據持久化功能,比如RDB和AOF都沒有,但是可以通過做集群同步的方
式,讓各memcache服務器的數據進行同步,從而實現數據的一致性,即保證各memcache的數據是一樣的,即使有任何一臺memcache發生故障,只要集群種有一臺memcache可用就不會出現數據丟失,當其他memcache重新加入到集群的時候可以自動從有數據的memcache當中自動獲取數據并提供服務。
Memcache借助了操作系統的libevent工具做高效的讀寫。libevent是個程序庫,它將Linux的epoll、BSD類操作系統的kqueue等事件處理功能封裝成統一的接口。即使對服務器的連接數增加,也能發揮高性能。memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統上發揮其高性能。
Memcache支持最大的內存存儲對象為1M,超過1M的數據可以使用客戶端壓縮或拆分報包放到多個key中,比較
大的數據在進行讀取的時候需要消耗的時間比較長,memcache最適合保存用戶的session實現session共享,
Memcached存儲數據時, Memcached會去申請1MB的內存, 把該塊內存稱為一個slab, 也稱為一個page。
memcached具有多種語言的客戶端開發包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/
Memcache和redis比較
比較類別 | Redis | memcached |
---|---|---|
支持的數據結構 | 哈希、列表、集合、有序集合 | 純kev-value |
持久化支持 | 有 | 無 |
高可用支持 | redis支持集群功能,可以實現主動復制,讀寫分離。官方也提供了sentinel集群管理工具,能夠實現主從服務監控,故障自動轉移,這一切,對于客戶端都是透明的,無需程序改動,也無需人工介入 | 需要二次開發 |
存儲value容量 | 最大512M | 最大1M |
內存分配 | 臨時申請空間,可能導致碎片 | 預分配內存池的方式管理內存,能夠省去內存分配時間 |
虛擬內存使用 | 有自己的VM機制,理論上能夠存儲比物理內存更多的數據,當數據超量時,會引發swap,把冷數據刷到磁盤上 | 所有的數據存儲在物理內存里 |
網絡模型 | 非阻塞IO復用模型,提供一些非KV存儲之外的排序,聚合功能,在執行這些功能時,復雜的CPU計算,會阻塞整個IO調度 | 非阻塞IO復用模型 |
水平擴展的支持 | redis cluster 可以橫向擴展 | 暫無 |
多線程 | Redis支持單線程 | Memcached支持多線程,CPU利用方面Memcache優于Redis |
過期策略 | 有專門線程,清除緩存數據 | 懶淘汰機制:每次往緩存放入數據的時候,都會存一個時間,在讀取的時候要和設置的時間做TTL比較來判斷是否過期 |
單機QPS | 約10W | 約60W |
源代碼可讀性 | 代碼清爽簡潔 | 能是考慮了太多的擴展性,多系統的兼容性,代碼不清爽 |
適用場景 | 復雜數據結構、有持久化、高可用需求、value存儲內容較大 | 純KV,數據量非常大,并發量非常大的業務 |
本文鏈接:http://www.thecarconnectin.com/35551.html
網友評論comments