Memcached or Redis?
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寶典

浙公網安備 33010602011771號