5分鐘詳解什么是Redis?
定義
Redis 是一種快速、開源、內(nèi)存中的鍵值數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。
REDIS 允許您在 RAM 上存儲(chǔ)鍵值對(duì),由于訪問 RAM 比訪問磁盤快 150,000 倍,比訪問 SSD 快 500 倍,這意味著速度。

但是,我們已經(jīng)在大部分操作中使用 RAM!
但是當(dāng)涉及緩存或數(shù)據(jù)庫交互時(shí),我們默認(rèn)使用磁盤,想象一下訪問數(shù)據(jù)庫以讀取 10,000 條記錄,如果數(shù)據(jù)存儲(chǔ)在磁盤上,平均需要 30 秒,而從 RAM 讀取大約需要 0.0002 秒。
這意味著它是一個(gè)超快的讀/寫系統(tǒng),但由于它存儲(chǔ)在 RAM 中,因此它是易失性的。
那么,我們會(huì)丟失數(shù)據(jù)嗎?
為了防止發(fā)生數(shù)據(jù)丟失,有一個(gè)內(nèi)置的持久性模塊,它會(huì)在給定的情況下將內(nèi)存狀態(tài)寫入磁盤上的轉(zhuǎn)儲(chǔ)文件,轉(zhuǎn)儲(chǔ)文件在系統(tǒng)啟動(dòng)時(shí)加載,一旦啟動(dòng)并運(yùn)行,數(shù)據(jù)就可用于操作,所以,沒有數(shù)據(jù)丟失。
我們可以在多個(gè)實(shí)例中使用不同的配置,以允許我們通過所謂的哨兵和主從架構(gòu)保持持續(xù)的正常運(yùn)行時(shí)間。
Redis 是Remote Dictionary Server
的首字母縮寫詞。
換句話說,它是一種工具,可讓您在 RAM 上存儲(chǔ)數(shù)據(jù)庫。
何時(shí)何地使用 Redis?
由于 Redis 速度快如閃電,因此主要用于緩存目的,它是 Redis 最閃耀的地方,因?yàn)樗峁┝丝梢酝ㄟ^字典結(jié)構(gòu)存儲(chǔ)的各種類型。
我們可以使用 Redis 緩存具有高流量和靜態(tài)內(nèi)容的完整頁面,如果頁面本身容易發(fā)生變化或者內(nèi)容是動(dòng)態(tài)生成的,那么無論如何都不應(yīng)該緩存它,無論我們使用的是 Redis 還是 Memcached。如果頁面主要包含靜態(tài)內(nèi)容或者每 x 時(shí)間刷新一次內(nèi)容,那么我們可以緩存該頁面并立即提供它!
在何處使用 Redis 的第一要?jiǎng)?wù)是整頁緩存(FPC)。
它可以用來做的另一件事是存儲(chǔ)會(huì)話,與沒有任何持久性的 Memcached 不同,Redis 有它并且允許會(huì)話存儲(chǔ),使用 Redis 處理會(huì)話可在與站點(diǎn)交互時(shí)提升用戶體驗(yàn)。
持久性對(duì)于存儲(chǔ)會(huì)話很重要,以避免在用戶交互的關(guān)鍵部分丟失數(shù)據(jù),例如,處理付款、將商品添加到購物車或作為經(jīng)過身份驗(yàn)證的用戶請(qǐng)求任何操作。
第二個(gè)是會(huì)話緩存。
Redis 作為一個(gè)進(jìn)程運(yùn)行,與 MySQL、PHP、Apache 和所有其他服務(wù)的運(yùn)行方式相同,它使用大量 RAM 內(nèi)存,如果服務(wù)器需要更多空間來進(jìn)行繁重的提升,那么它可能會(huì)選擇殺死 Redis 的進(jìn)程,在這種情況下,我們會(huì)遇到服務(wù)停機(jī)并可能丟失數(shù)據(jù),為了防止這種情況發(fā)生,Redis 內(nèi)置了 Master-Slave 架構(gòu)。
這種架構(gòu)允許我們有額外的進(jìn)程來監(jiān)控我們的主要進(jìn)程,從進(jìn)程模仿它的命令,偶爾會(huì)復(fù)制主轉(zhuǎn)儲(chǔ)文件,以保持進(jìn)程之間的一致性。這些監(jiān)控進(jìn)程被稱為 Slaves,而主要的是 Master。
當(dāng)主進(jìn)程被殺死時(shí),其中一個(gè)從屬進(jìn)程成為主進(jìn)程并在主進(jìn)程重新啟動(dòng)時(shí)處理所有請(qǐng)求,一旦 Master 再次啟動(dòng),它會(huì)從 Temporary Master 獲取轉(zhuǎn)儲(chǔ)文件并將其用作基礎(chǔ),主進(jìn)程重新實(shí)例化為主進(jìn)程,而臨時(shí)主進(jìn)程再次變回從進(jìn)程。
但是我們?cè)趺粗乐鬟M(jìn)程什么時(shí)候宕機(jī)了呢?我們?cè)趺粗滥膫€(gè) Slave 應(yīng)該成為 master?
Sentinel 是具有檢查 Redis 實(shí)例是否正常工作的特定職責(zé)的進(jìn)程,他們負(fù)責(zé):
檢測(cè)Master是否宕機(jī);
選擇誰是臨時(shí)主人;
監(jiān)控 Master 何時(shí)返回并告訴它要加載哪個(gè)轉(zhuǎn)儲(chǔ)文件。
哨兵,我猜這個(gè)名字說明了一切。
一般設(shè)置通常使用一個(gè) Master、兩個(gè) Slave 和三個(gè) Sentinel。
Redis 有一個(gè)很好的社區(qū)和寫得很好的文檔,如果你想嘗試一下,你會(huì)在他們的官方網(wǎng)站上找到很多支持。
Redis官網(wǎng):
https://redis.io/
