分(fēn)享到:

緩存:選擇Memcached還(hái)是Redis?

日(rì)期:2017-04-05 18:32:00     閱讀(dú):518     文章(zhāng)來(lái)源:源美網絡     标簽:深圳網站(zhàn)建設,深圳網站(zhàn)開發

要Memcached還(hái)是要Redis?在構建一款現代且由數據庫驅動的Web應用程序并希望使其擁有更爲出色的性能表現時,這個問(wèn)題總會時不時出現、并給每一位開發人(rén)員(yuán)帶來(lái)困擾。在考慮對應用程序的性能表現進行提升時,緩存機(jī)制往往是解決問(wèn)題的重要起點,而Memcached與Redis則經常被作(zuò)爲初步方案來(lái)加以比較。

這兩套聲名顯赫的緩存引擎擁有着諸多相(xiàng)似之處,但(dàn)它們同樣也具備大(dà)量顯著差異。作(zuò)爲二者當中更年(nián)輕也更加靈活的方案,Redis被大(dà)部分(fēn)技術(shù)人(rén)員(yuán)視爲首選目标——但(dàn)請(qǐng)别掉以輕心,不容忽視的重要例外情況也是客觀存在的。


兩者相(xiàng)似之處


讓我們先從(cóng)二者的相(xiàng)似之處談起。Memcached與Redis都(dōu)屬于内存内、鍵值數據存儲方案。它們都(dōu)從(cóng)屬于數據管理(lǐ)解決方案中的NoSQL家族,而且都(dōu)基于同樣的鍵值數據模型。雙方都(dōu)選擇将全部數據保存在内存當中,這自(zì)然也就(jiù)讓它們成爲非常理(lǐ)想的緩沖層實現方案。從(cóng)性能表現的角度來(lái)看(kàn),兩類數據存儲機(jī)制也具備諸多共通性,包括擁有幾乎相(xiàng)同的特征(與指标)表現、而且高度關注工(gōng)作(zuò)負載的數據吞吐量與延遲狀況。


除了同爲内存内鍵值數據存儲方案,Memcached與Redis還(hái)都(dōu)是相(xiàng)當成熟而且極具人(rén)氣的開源項目。Memcached最初是由Brad Fitzpatrick于2003年(nián)開發而成,當時其直接服務對象爲LiveJournal交友網站(zhàn)。在此之後,Memcached被重新用C語言進行了編寫(其最初實現方式爲Perl語言)且投身(shēn)于公共領域,并在這裡(lǐ)逐步發展爲現代Web應用程序的構建基石。Memcached項目的當前開發工(gōng)作(zuò)主要關注其運行穩定性及優化效果方面,而不再積極爲其打造更多新型功能。


Redis則由Salvatore Sanfilippo于2009年(nián)創建,而且時至今日(rì)Sanfilippo仍然擔任着該項目的首席開發者以及惟一維護者的角色。Redis有時候會被人(rén)們稱爲“強化版的Memcached”。考慮到從(cóng)Memcached身(shēn)上吸取并借鑒到大(dà)量寶貴的經驗教訓,這樣的評價其實并不令人(rén)意外。Redis在功能多樣性方面要勝過Memcached,這雖然讓者更爲強大(dà)也更具靈活性、但(dàn)其複雜程度也較後者爲甚。


作(zuò)爲兩套被衆多企業采納并部署在無數關鍵性生(shēng)産任務環境當中的解決方案,Memcached與Redis在任何一種可(kě)行性編程語言領域都(dōu)擁有能夠提供支持的客戶端庫,而且二者也被包含在開發人(rén)員(yuán)們使用的多種庫及軟件(jiàn)包之内。事(shì)實上,現在我們甚至已經很難找到一套不包含Memcached或者Redis内置支持機(jī)制的Web堆棧。


Memcached與Redis爲什麽如(rú)此受人(rén)擁戴?除了二者卓越的實際效果之外,雙方各自(zì)極爲簡便的上手難度也是又一大(dà)加分(fēn)項。無論是Memcached還(hái)是Redis,其使用便捷性在開發人(rén)員(yuán)當中都(dōu)可(kě)謂廣爲人(rén)知。隻需要幾分(fēn)鍾我們就(jiù)能完成安裝工(gōng)作(zuò),并讓它們開始與應用程序順暢協作(zuò)。換句話(huà)來(lái)說(shuō),隻需投入一小部分(fēn)時間與精力,大(dà)家就(jiù)能獲得(de)立竿見(jiàn)影(yǐng)且效果極佳的性能表現提升——具體(tǐ)而言,性能将直接步入新的量級。面對如(rú)此簡單而又能夠帶來(lái)巨大(dà)收益的解決方案,又有誰能抗拒得(de)了它們的誘惑呢(ne)?


何時應該使用Memcached


相(xiàng)對Memcached而言,Redis的面世時間更晚且具備更多功能,因此開發人(rén)員(yuán)通常将其視爲默認性首選方案。不過有兩類特殊場景仍然是Memcached的一家天下。首先就(jiù)是對小型靜(jìng)态數據進行緩存處理(lǐ),最具代表性的例子就(jiù)是HTML代碼片段。Memcached的内部内存管理(lǐ)機(jī)制雖然不像Redis的那樣複雜,但(dàn)卻更具實際效率——這是因爲Memcached在處理(lǐ)元數據時所消耗的内存資源相(xiàng)對更少。作(zuò)爲Memcached所支持的惟一一種數據類型,字符串非常适合用于保存那些隻需要進行讀(dú)取操作(zuò)的數據,因爲字符串本身(shēn)無需進行進一步處理(lǐ)。


除此之外,Memcached在橫向擴展方面也比Redis更具優勢。由于其在設計(jì)上的思路(lù)傾向以及相(xiàng)對更爲簡單的功能設置,Memcached在實現擴展時的難度比Redis低得(de)多。不過根據我們了解到的情況,目前已經有多種經過測試且切實有效的方案能夠将Redis擴展至多台服務器之上,而其即将發布的3.0版本(感興趣的朋友可(kě)以點擊此處查看(kàn)其候選版本說(shuō)明)将包含專門(mén)針對橫向擴展場景的内置集群化機(jī)制。


何時應該使用Redis


除非大(dà)家需要考慮某種限定性條件(jiàn)(例如(rú)處理(lǐ)傳統應用程序)對于Memcached的特殊依賴性,或者自(zì)己的實際用例屬于前面提到的兩類場景中的一種,否則請(qǐng)直接選擇Redis并加以運用。憑借着Redis所帶來(lái)的卓越緩存方案,我們将擁有強大(dà)的處理(lǐ)能力——例如(rú)對緩存内容及持久性進行細節調整的能力——以及出色的整體(tǐ)執行效率。


Redis幾乎在緩存管理(lǐ)工(gōng)作(zuò)中的每一個側面都(dōu)表現出顯而易見(jiàn)的優越性。這套緩存方案采用所謂數據回收機(jī)制,能夠将陳舊數據從(cóng)内存中删除以提供新數據所必需的緩存空間。Memcached的數據回收機(jī)制使用的是LRU(即最低近期使用量)算法,而且往往會比較武斷地直接删除掉與新數據體(tǐ)系相(xiàng)近的原有内容。相(xiàng)比之下,Redis允許用戶更爲精準地進行細化控制,利用六種不同回收策略确切提高緩存資源的實際利用率。Redis還(hái)采用更爲複雜的内存管理(lǐ)與回收對象備選方案。


Redis還(hái)能爲我們帶來(lái)最大(dà)程度的靈活性空間,從(cóng)而保證管理(lǐ)員(yuán)在打理(lǐ)緩存對象時擁有充裕的施展平台。在這方面,Memcached将鍵名限制在250字節,值也被限制在不超過1MB,且隻适用于普通字符串。相(xiàng)比之下,Redis則将鍵名與值的最大(dà)上限各自(zì)設定爲512MB,且支持二進制格式。Redis支持六種數據類型,因此能夠更加智能地對數據進行緩存處理(lǐ)及操作(zuò),這相(xiàng)當于爲應用程序開發人(rén)員(yuán)敞開了一道通往無盡可(kě)能性的大(dà)門(mén)。


相(xiàng)對于将對象保存爲序列化字符串,Redis允許開發人(rén)員(yuán)以散列方式将對象域及值加以保存,并利用單一鍵對其進行管理(lǐ)。Redis散列機(jī)制的存在保證開發人(rén)員(yuán)無需經曆獲取完整字符串、反序列化、更新值、對象重新序列化并在每次值更新後利用其替代緩存内完整字符串這一系列複雜的流程——這也意味着資源消耗量得(de)以降低、性能表現迎來(lái)顯著提升。Redis所支持的其它數據類型,例如(rú)Lists以及Sets——也可(kě)被用于實現更加複雜的緩存管理(lǐ)模式。


Redis的另一大(dà)重要優勢在于,它所保存的數據具備透明化特性,也就(jiù)是說(shuō)服務器能夠直接對這些數據進行操作(zuò)。Redis當中提供160多種可(kě)用命令,其中大(dà)部分(fēn)用于實現數據處理(lǐ)操作(zuò)并通過服務器端腳本将邏輯嵌入至數據存儲體(tǐ)系當中。這些内置命令及用戶腳本帶來(lái)了極大(dà)的靈活性優勢,足以幫助大(dà)家直接在Redis内部完成數據處理(lǐ)任務——而不必将數據在網絡中的其它專門(mén)處理(lǐ)系統之間來(lái)回移動。


Redis還(hái)提供可(kě)選而且能夠具體(tǐ)調整的數據持久性方案,其設計(jì)目的在于在發生(shēng)規劃内停機(jī)或者計(jì)劃外故障之後對緩存内容進行重新引導。雖然我們更傾向于強調緩存内數據的易失性與暫時性,但(dàn)将數據在磁盤中加以持久保存在某些緩存場景當中仍然極具現實意義。這種機(jī)制能夠在設備重啓之後快(kuài)速将保存在磁盤上的數據重新載入至緩存當中,從(cóng)而大(dà)大(dà)縮短(duǎn)緩存預熱(rè)周期并根據主數據存儲内容對當前緩存内容進行重新評估。


最後但(dàn)也同樣重要的一點是,Redis能夠提供複制功能。複制功能旨在幫助緩存體(tǐ)系實現高可(kě)用性配置方案,從(cóng)而在遭遇故障的情況下繼續爲應用程序提供不間斷的緩存服務。很明顯,一套成熟的緩存方案應該能夠在應用程序發生(shēng)故障時略微甚至完全不給用戶體(tǐ)驗或者應用程序性能表現帶來(lái)任何影(yǐng)響,而這種對緩存内容及服務可(kě)用性的有力保障在大(dà)多數情況下也成爲緩存解決方案的一大(dà)主要優勢。


開源軟件(jiàn)業界一直在不斷努力,爲我們帶來(lái)當下技術(shù)領域中最爲出色的各類解決方案。而在談到利用緩存機(jī)制對應用程序性能表現加以提升這一話(huà)題時,Redis與Memcached作(zuò)爲兩款廣受贊譽而且久經考驗的解決方案、也自(zì)然而然地成爲完成這項任務的兩大(dà)首選技術(shù)成果。不過從(cóng)功能多樣性以及設計(jì)先進性的角度出發,Redis顯然更适合被大(dà)家作(zuò)爲通用性的首選方案——除了少部分(fēn)特殊場景之外。


以上是我們深圳網站(zhàn)建設源美設計(jì)公司提供的緩存清理(lǐ)兩種方法,看(kàn)完以上的内容您是不是對緩存功能上又有了一定的了解了呢(ne)?源美設計(jì)是網站(zhàn)建設制作(zuò)專家,爲您提供專業的網站(zhàn)建設集團網站(zhàn)建設營銷型網站(zhàn)建設品牌網站(zhàn)建設企業官網建設響應式網站(zhàn)建設,并提供一體(tǐ)化的網站(zhàn)推廣解決方案,服務熱(rè)線:0755-36630155,緻電客戶專線:138-2888-3821謝先生(shēng)


文章(zhāng)引用:

本站(zhàn)文章(zhāng)爲深圳網站(zhàn)建設·源美網絡原創策劃,如(rú)有版權糾紛或者違規問(wèn)題,請(qǐng)聯系我們删除,謝謝!

上一篇: 微信小程序初體(tǐ)驗

下一篇: 微信開發:php如(rú)何利用微信jssdk調用微信掃一掃

返回列表
最新案例
OUR ADVANTAGE WORKS

售後保障

承諾任何問(wèn)題1小時内解決

數據備份

更安全、更高效、更穩定

價格公道精準

項目經理(lǐ)精準報價不弄虛作(zuò)假

合作(zuò)無風(fēng)險

重合同講信譽,無效全額退款