Memcached or Redis?
在我們討論如何提升現代資料庫驅動的web應用程式的性能時,這個問題是不可避免的
Memcached or Redis?
當性能需要進一步提高時,快取通常是第一步
Memcached vs redis
首先從相似之處說起,Memcached Redis 都屬于NoSql資料管理的解決方案,他們兩個都基于記憶體,并且資料保存在RAM中,基于記憶體的高速特性,使得他們在作為快取層面極其合適,在性能方面,兩個資料庫也非常相似,在吞吐量和延遲方面,表現幾乎不分伯仲.說了這么多,結論是,無論你使用哪一個,每秒處理請求的次數都不會成為瓶頸,
Memcached和Redis都是成熟且非常受歡迎的開源專案
Memcached
Memcached最初由Brad Fitzpatrick于2003年為LiveJournal網站開發, 后來Memcached被用C重寫(最初的實作是Perl),并且開源使其成為現代Web應用程式的基石, Memcached的當前開發側重于穩定性和優化,而不是添加新功能,
Redis
Redis由Salvatore Sanfilippo于2009年創建,Sanfilippo至今仍是該專案的首席開發商,Redis的某些部分是根據從使用Memcached獲得的靈感而構建的, Redis具有比Memcached更多的功能,因此更加強大和靈活,
為什么Memcached和Redis這么受歡迎?
它們不僅非常有效,而且相對簡單,對于開發者來說,使用Memcached或Redis都是一件很容易的事情,只需要幾分鐘就可以設定并使用,因此,少量的時間和精力投入就可以對性能產生直接的、巨大的影響,而且通常是數量級的,誰不愛呢?
Memcached優缺點
當快取相對較小的靜態資料(如HTML代碼片段)時,Memcached可能是更好的選擇,Memcached的內部記憶體管理雖然不像Redis那樣復雜,但在最簡單的用例中效率更高,因為它消耗的元資料記憶體資源相對較少,字串(Memcached支持的唯一資料型別)非常適合存盤只讀的資料,因為字串不需要進一步處理,
使用簡單的key-value存盤的話,Memcached的記憶體利用率更高,而如果Redis采用hash結構來做key-value存盤,由于其組合式的壓縮,其記憶體利用率會高于Memcached,當然,這和你的應用場景和資料特性有關,
Memcached優于Redis的情況是擴展, 由于Memcached是多執行緒的,因此您可以通過提供更多的計算資源來輕松地進行擴展,但是將丟失部分或全部的快取資料(取決于是否使用一致的哈希), Redis主要是單執行緒的,可以通過集群進行水平擴展而不會丟失資料, 群集是一種有效的擴展解決方案,但是設定和操作相對來說較為復雜,
Redis優缺點
Redis的優勢在快取管理的幾乎每個方面都是顯而易見的,快取采用一種稱為資料回收的機制,通過從記憶體中洗掉舊資料來為新資料騰出空間,Memcached的資料回識訓制采用了最近最少使用的演算法(LRU),相比之下,Redis允許對驅逐進行細粒度的控制,讓你從六種不同的驅逐策略中選擇,Redis還采用了更復雜的方法來進行記憶體管理和剔除候選物件,Redis支持lazy和active兩種型別的資料回收,只有在需要更多空間或主動獲取空間時才會回收資料,
Redis為快取物件提供了更大的靈活性,Memcached限制鍵名為250位元組,并且只適用于普通字串,而Redis允許鍵名和值最大為512MB,并且它們是二進制安全的,此外,Redis有五種主要的資料結構可供選擇.
redis 資料結構
使用Redis作為快取,可以獲得更多的功能(比如微調快取內容和持久化)和更高的整體效率,而且一旦使用了
資料結構,對于特定的應用程式場景,效率就會大大提高,
使用Redis資料結構可以簡化和優化很多事情而不僅僅在快取時, 例如我們可以使用Redis Hash來存盤物件的欄位和值,并使用單個鍵來管理它們,而不是將物件存盤為序列化的string, Redis Hash為開發人員節省了獲取整個字串,反序列化,更新值,重新序列化物件以及將快取中的整個字串替換為新值的需求,這意味著更低的資源消耗和更高的性能,
Redis提供的其他資料結構(如list、set、zset、hyperloglog、bitmap和Geo)可以用于實作更復雜的場景,使用他們可以大大降低復雜性和帶寬消耗,
Redis的另一個重要優點是它存盤的資料不是透明的,因此服務器可以直接對其進行操作, Redis提供的180多個命令中有相當大的一部分專門用于資料處理操作,并通過服務器端Lua腳本將邏輯嵌入資料存盤本身, 這些內置命令和用戶腳本可以靈活地在Redis中處理資料/處理任務,而不必通過網路將資料傳送到另一個系統進行處理,
Redis提供了可選和可調的資料持久性方式,旨在在計劃關倍訓意外故障后引導快取,雖然我們傾向于認為快取中的資料是不穩定的和短暫的,但在快取場景中,將資料持久化到磁盤是非常有價值的,讓快取資料在重新啟動后立即可用來加載,這樣做可以允許更短的快取預熱時間,消除資料的填充時間以及快取資料重新計算的時間(如果快取是計算密集型資料的話)
關注公眾號:java寶典
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263195.html
標籤:Java

