遠(yuǎn)程字典服務(wù)器Redis緩存全接觸
譯文【51CTO.com快譯】我們都遇到過(guò)應(yīng)用程序運(yùn)行慢騰騰的情況。再優(yōu)秀的代碼也會(huì)在高負(fù)載下降低性能。緩存是一種快速且相對(duì)省錢的方法,可大幅提升性能,并縮短響應(yīng)時(shí)間。
Redis簡(jiǎn)介
Redis(遠(yuǎn)程字典服務(wù)器)是一種開(kāi)源的內(nèi)存中數(shù)據(jù)存儲(chǔ),最常用作分布式緩存。它提供各種高效的數(shù)據(jù)結(jié)構(gòu),旨在可以高速訪問(wèn)您的數(shù)據(jù)。Redis又叫NoSQL數(shù)據(jù)庫(kù)和鍵/值存儲(chǔ)。由于Redis將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,而不是存儲(chǔ)在磁盤(pán)上,提供了無(wú)與倫比的速度、可靠性和性能。
那么,內(nèi)存中數(shù)據(jù)存儲(chǔ)又是什么呢?簡(jiǎn)而言之,它是將整個(gè)數(shù)據(jù)集保存在內(nèi)存中的數(shù)據(jù)庫(kù)。這意味著每當(dāng)您查詢數(shù)據(jù)庫(kù)或更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),僅訪問(wèn)主內(nèi)存。因此,這些操作不涉及磁盤(pán)。這很棒,因?yàn)橹鲀?nèi)存比任何磁盤(pán)都要快得多。
為什么將Redis用作緩存?
緩存的主要目的是,縮短訪問(wèn)存儲(chǔ)在應(yīng)用程序主內(nèi)存空間之外的數(shù)據(jù)所需的時(shí)間。如果不使用緩存,應(yīng)用程序針對(duì)每個(gè)請(qǐng)求與數(shù)據(jù)源進(jìn)行交互;如果使用緩存,只需要對(duì)外部數(shù)據(jù)源發(fā)出單個(gè)請(qǐng)求,隨后的訪問(wèn)由緩存來(lái)處理。
應(yīng)用程序依賴外部數(shù)據(jù)源時(shí),這些數(shù)據(jù)源的延遲和吞吐量會(huì)造成性能瓶頸。提升性能的一種方法是在內(nèi)存中存儲(chǔ)和處理數(shù)據(jù),其位置更靠近應(yīng)用程序。
這時(shí)候Redis就能發(fā)揮作用。Redis旨在將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中,從而在讀取或?qū)懭霐?shù)據(jù)時(shí)提供盡可能高的性能。
Redis的速度極快。它提供亞毫秒級(jí)響應(yīng)時(shí)間,每秒可支持?jǐn)?shù)百萬(wàn)個(gè)請(qǐng)求,以支持要求苛刻的實(shí)時(shí)應(yīng)用程序。
您要做的通常是將經(jīng)常訪問(wèn)的數(shù)據(jù)存儲(chǔ)在Redis中,那樣無(wú)論何時(shí)請(qǐng)求數(shù)據(jù),數(shù)據(jù)都可以來(lái)自緩存而不是您的數(shù)據(jù)庫(kù)。然后,只要對(duì)您的數(shù)據(jù)進(jìn)行更改,就可以使相關(guān)緩存無(wú)效,那樣您可以讓緩存保持最新。
Redis緩存的工作原理
假設(shè)您有一個(gè)基于WordPress的網(wǎng)站。
WordPress頁(yè)面首次加載時(shí),在服務(wù)器上執(zhí)行數(shù)據(jù)庫(kù)查詢。Redis會(huì)記住或緩存該查詢。因此,另一個(gè)用戶加載WordPress頁(yè)面時(shí),結(jié)果從Redis和內(nèi)存來(lái)提供,無(wú)需查詢數(shù)據(jù)庫(kù)。
對(duì)象緩存的工作原理是將加載WordPress頁(yè)面所需的SQL查詢緩存在內(nèi)存中。當(dāng)頁(yè)面加載時(shí),生成的SQL查詢結(jié)果由Redis從內(nèi)存來(lái)提供,因此查詢不必命中數(shù)據(jù)庫(kù)。結(jié)果是頁(yè)面加載時(shí)間短得多,服務(wù)器對(duì)數(shù)據(jù)庫(kù)資源的影響較小。
圖1. Redis的工作原理
訪問(wèn)內(nèi)存(物理RAM)中的數(shù)據(jù)比訪問(wèn)硬驅(qū)中的數(shù)據(jù)要快得多。因此很容易注意到,如果應(yīng)用程序想要訪問(wèn)的數(shù)據(jù)在主內(nèi)存中,訪問(wèn)該數(shù)據(jù)比訪問(wèn)存儲(chǔ)在硬驅(qū)上的數(shù)據(jù)容易得多。
如果查詢?cè)赗edis中不可用,數(shù)據(jù)庫(kù)提供結(jié)果,Redis將結(jié)果添加到緩存中。如果值在數(shù)據(jù)庫(kù)中加以更新(比如在WordPress中創(chuàng)建了一個(gè)新的帖子或頁(yè)面),該查詢的Redis值將無(wú)效,以防止提供錯(cuò)誤的緩存數(shù)據(jù)。
為什么使用Redis?
- 快速響應(yīng)的數(shù)據(jù)庫(kù):它將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,而不是存儲(chǔ)在磁盤(pán)上,因此執(zhí)行讀寫(xiě)操作時(shí),響應(yīng)時(shí)間比其他數(shù)據(jù)庫(kù)快。可以與其他數(shù)據(jù)庫(kù)一起使用,有助于減輕負(fù)載、提升性能,但也可以用作主數(shù)據(jù)庫(kù)。
- 數(shù)據(jù)持久性:Redis使用持久性磁盤(pán)存儲(chǔ),旨在遇到進(jìn)程中斷和網(wǎng)絡(luò)瓶頸后可以存活下來(lái)。
- 會(huì)話緩存:Redis最明顯的使用場(chǎng)景之一是將其用作會(huì)話緩存。與其他會(huì)話存儲(chǔ)相比,使用Redis的優(yōu)點(diǎn)在于Redis提供了持久性。
- 基于鍵的訪問(wèn):Redis基于鍵值模型,其中數(shù)據(jù)由Redis通過(guò)鍵來(lái)存儲(chǔ)和獲取。基于鍵的訪問(wèn)帶來(lái)了極高效的訪問(wèn)時(shí)間,這種模型可自然地映射到緩存。
想了解Redis的更多信息以及相關(guān)資源,可以訪問(wèn)說(shuō)明文檔:https://redis.io/。
原文標(biāo)題:Redis as Cache: How it Works and Why to Use it,作者:Bobby Borisov
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】