《大廠內(nèi)部資料》Redis 性能優(yōu)化的 13 條軍規(guī)

轉(zhuǎn)載自微信公眾號(hào)“Java中文社群”

Redis 是基于單線程模型實(shí)現(xiàn)的爷抓,也就是 Redis 是使用一個(gè)線程來(lái)處理所有的客戶端請(qǐng)求的,盡管 Redis 使用了非阻塞式 IO阻塑,并且對(duì)各種命令都做了優(yōu)化(大部分命令操作時(shí)間復(fù)雜度都是 O(1))蓝撇,但由于 Redis 是單線程執(zhí)行的特點(diǎn),因此它對(duì)性能的要求更加苛刻陈莽,本文我們將通過(guò)一些優(yōu)化手段虽抄,讓 Redis 更加高效的運(yùn)行。

本文我們將使用以下手段独柑,來(lái)提升 Redis 的運(yùn)行速度:

  1. 縮短鍵值對(duì)的存儲(chǔ)長(zhǎng)度迈窟;
  2. 使用 lazy free(延遲刪除)特性;
  3. 設(shè)置鍵值的過(guò)期時(shí)間忌栅;
  4. 禁用長(zhǎng)耗時(shí)的查詢命令车酣;
  5. 使用 slowlog 優(yōu)化耗時(shí)命令;
  6. 使用 Pipeline 批量操作數(shù)據(jù)狂秘;
  7. 避免大量數(shù)據(jù)同時(shí)失效骇径;
  8. 客戶端使用優(yōu)化;
  9. 限制 Redis 內(nèi)存大姓叽骸破衔;
  10. 使用物理機(jī)而非虛擬機(jī)安裝 Redis 服務(wù);
  11. 檢查數(shù)據(jù)持久化策略钱烟;
  12. 禁用 THP 特性晰筛;
  13. 使用分布式架構(gòu)來(lái)增加讀寫(xiě)速度。

1.縮短鍵值對(duì)的存儲(chǔ)長(zhǎng)度

鍵值對(duì)的長(zhǎng)度是和性能成反比的拴袭,比如我們來(lái)做一組寫(xiě)入數(shù)據(jù)的性能測(cè)試读第,執(zhí)行結(jié)果如下:

image

從以上數(shù)據(jù)可以看出,在 key 不變的情況下拥刻,value 值越大操作效率越慢怜瞒,因?yàn)?Redis 對(duì)于同一種數(shù)據(jù)類型會(huì)使用不同的內(nèi)部編碼進(jìn)行存儲(chǔ),比如字符串的內(nèi)部編碼就有三種:int(整數(shù)編碼)般哼、raw(優(yōu)化內(nèi)存分配的字符串編碼)吴汪、embstr(動(dòng)態(tài)字符串編碼),這是因?yàn)?Redis 的作者是想通過(guò)不同編碼實(shí)現(xiàn)效率和空間的平衡蒸眠,然而數(shù)據(jù)量越大使用的內(nèi)部編碼就越復(fù)雜漾橙,而越是復(fù)雜的內(nèi)部編碼存儲(chǔ)的性能就越低。

這還只是寫(xiě)入時(shí)的速度楞卡,當(dāng)鍵值對(duì)內(nèi)容較大時(shí)霜运,還會(huì)帶來(lái)另外幾個(gè)問(wèn)題:

  • 內(nèi)容越大需要的持久化時(shí)間就越長(zhǎng),需要掛起的時(shí)間越長(zhǎng)蒋腮,Redis 的性能就會(huì)越低淘捡;
  • 內(nèi)容越大在網(wǎng)絡(luò)上傳輸?shù)膬?nèi)容就越多,需要的時(shí)間就越長(zhǎng)池摧,整體的運(yùn)行速度就越低案淋;
  • 內(nèi)容越大占用的內(nèi)存就越多,就會(huì)更頻繁的觸發(fā)內(nèi)存淘汰機(jī)制险绘,從而給 Redis 帶來(lái)了更多的運(yùn)行負(fù)擔(dān)踢京。

因此在保證完整語(yǔ)義的同時(shí),我們要盡量的縮短鍵值對(duì)的存儲(chǔ)長(zhǎng)度宦棺,必要時(shí)要對(duì)數(shù)據(jù)進(jìn)行序列化和壓縮再存儲(chǔ)瓣距,以 Java 為例,序列化我們可以使用 protostuff 或 kryo代咸,壓縮我們可以使用 snappy蹈丸。

2.使用 lazy free 特性

lazy free 特性是 Redis 4.0 新增的一個(gè)非常使用的功能,它可以理解為惰性刪除或延遲刪除呐芥。意思是在刪除的時(shí)候提供異步延時(shí)釋放鍵值的功能逻杖,把鍵值釋放操作放在 BIO(Background I/O) 單獨(dú)的子線程處理中,以減少刪除刪除對(duì) Redis 主線程的阻塞思瘟,可以有效地避免刪除 big key 時(shí)帶來(lái)的性能和可用性問(wèn)題荸百。

lazy free 對(duì)應(yīng)了 4 種場(chǎng)景,默認(rèn)都是關(guān)閉的:

lazyfree-lazy-eviction 
nolazyfree-lazy-expire 
nolazyfree-lazy-server-del 
noslave-lazy-flush no

它們代表的含義如下:

  • lazyfree-lazy-eviction:表示當(dāng) Redis 運(yùn)行內(nèi)存超過(guò) maxmeory 時(shí)滨攻,是否開(kāi)啟 lazy free 機(jī)制刪除够话;
  • lazyfree-lazy-expire:表示設(shè)置了過(guò)期時(shí)間的鍵值,當(dāng)過(guò)期之后是否開(kāi)啟 lazy free 機(jī)制刪除光绕;
  • lazyfree-lazy-server-del:有些指令在處理已存在的鍵時(shí)女嘲,會(huì)帶有一個(gè)隱式的 del 鍵的操作,比如 rename 命令诞帐,當(dāng)目標(biāo)鍵已存在欣尼,Redis 會(huì)先刪除目標(biāo)鍵,如果這些目標(biāo)鍵是一個(gè) big key停蕉,就會(huì)造成阻塞刪除的問(wèn)題愕鼓,此配置表示在這種場(chǎng)景中是否開(kāi)啟 lazy free 機(jī)制刪除;
  • slave-lazy-flush:針對(duì) slave(從節(jié)點(diǎn)) 進(jìn)行全量數(shù)據(jù)同步谷徙,slave 在加載 master 的 RDB 文件前拒啰,會(huì)運(yùn)行 flushall 來(lái)清理自己的數(shù)據(jù),它表示此時(shí)是否開(kāi)啟 lazy free 機(jī)制刪除完慧。

建議開(kāi)啟其中的 lazyfree-lazy-eviction谋旦、lazyfree-lazy-expire、lazyfree-lazy-server-del 等配置屈尼,這樣就可以有效的提高主線程的執(zhí)行效率册着。

3.設(shè)置鍵值的過(guò)期時(shí)間

我們應(yīng)該根據(jù)實(shí)際的業(yè)務(wù)情況,對(duì)鍵值設(shè)置合理的過(guò)期時(shí)間脾歧,這樣 Redis 會(huì)幫你自動(dòng)清除過(guò)期的鍵值對(duì)甲捏,以節(jié)約對(duì)內(nèi)存的占用,以避免鍵值過(guò)多的堆積鞭执,頻繁的觸發(fā)內(nèi)存淘汰策略司顿。

4.禁用長(zhǎng)耗時(shí)的查詢命令

Redis 絕大多數(shù)讀寫(xiě)命令的時(shí)間復(fù)雜度都在 O(1) 到 O(N) 之間芒粹,在官方文檔對(duì)每命令都有時(shí)間復(fù)雜度說(shuō)明,地址:https://redis.io/commands大溜,如下圖所示:

image

其中 O(1) 表示可以安全使用的化漆,而 O(N) 就應(yīng)該當(dāng)心了,N 表示不確定钦奋,數(shù)據(jù)越大查詢的速度可能會(huì)越慢座云。因?yàn)?Redis 只用一個(gè)線程來(lái)做數(shù)據(jù)查詢,如果這些指令耗時(shí)很長(zhǎng)付材,就會(huì)阻塞 Redis朦拖,造成大量延時(shí)。

要避免 O(N) 命令對(duì) Redis 造成的影響厌衔,可以從以下幾個(gè)方面入手改造:

  • 決定禁止使用 keys 命令璧帝;
  • 避免一次查詢所有的成員,要使用 scan 命令進(jìn)行分批的葵诈,游標(biāo)式的遍歷裸弦;
  • 通過(guò)機(jī)制嚴(yán)格控制 Hash、Set作喘、Sorted Set 等結(jié)構(gòu)的數(shù)據(jù)大欣砀怼;
  • 將排序泞坦、并集窖贤、交集等操作放在客戶端執(zhí)行,以減少 Redis 服務(wù)器運(yùn)行壓力贰锁;
  • 刪除 (del) 一個(gè)大數(shù)據(jù)的時(shí)候赃梧,可能會(huì)需要很長(zhǎng)時(shí)間,所以建議用異步刪除的方式 unlink豌熄,它會(huì)啟動(dòng)一個(gè)新的線程來(lái)刪除目標(biāo)數(shù)據(jù)授嘀,而不阻塞 Redis 的主線程。

5.使用 slowlog 優(yōu)化耗時(shí)命令

我們可以使用 slowlog 功能找出最耗時(shí)的 Redis 命令進(jìn)行相關(guān)的優(yōu)化锣险,以提升 Redis 的運(yùn)行速度蹄皱,慢查詢有兩個(gè)重要的配置項(xiàng):

  • slowlog-log-slower-than :用于設(shè)置慢查詢的評(píng)定時(shí)間,也就是說(shuō)超過(guò)此配置項(xiàng)的命令芯肤,將會(huì)被當(dāng)成慢操作記錄在慢查詢?nèi)罩局邢镎郏鼒?zhí)行單位是微秒 (1 秒等于 1000000 微秒);
  • slowlog-max-len :用來(lái)配置慢查詢?nèi)罩镜淖畲笥涗洈?shù)崖咨。

我們可以根據(jù)實(shí)際的業(yè)務(wù)情況進(jìn)行相應(yīng)的配置锻拘,其中慢日志是按照插入的順序倒序存入慢查詢?nèi)罩局校覀兛梢允褂?slowlog get n 來(lái)獲取相關(guān)的慢查詢?nèi)罩净鞫祝僬业竭@些慢查詢對(duì)應(yīng)的業(yè)務(wù)進(jìn)行相關(guān)的優(yōu)化署拟。

6.使用 Pipeline 批量操作數(shù)據(jù)

Pipeline (管道技術(shù)) 是客戶端提供的一種批處理技術(shù)婉宰,用于一次處理多個(gè) Redis 命令,從而提高整個(gè)交互的性能芯丧。

我們使用 Java 代碼來(lái)測(cè)試一下 Pipeline 和普通操作的性能對(duì)比芍阎,Pipeline 的測(cè)試代碼如下:

public class PipelineExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        // 記錄執(zhí)行開(kāi)始時(shí)間
        long beginTime = System.currentTimeMillis();
        // 獲取 Pipeline 對(duì)象
        Pipeline pipe = jedis.pipelined();
        // 設(shè)置多個(gè) Redis 命令
        for (int i = 0; i < 100; i++) {
            pipe.set("key" + i, "val" + i);
            pipe.del("key"+i);
        }
        // 執(zhí)行命令
        pipe.sync();
        // 記錄執(zhí)行結(jié)束時(shí)間
        long endTime = System.currentTimeMillis();
        System.out.println("執(zhí)行耗時(shí):" + (endTime - beginTime) + "毫秒");
    }
}

以上程序執(zhí)行結(jié)果為:

執(zhí)行耗時(shí):297毫秒

普通的操作代碼如下:

public class PipelineExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        // 記錄執(zhí)行開(kāi)始時(shí)間
        long beginTime = System.currentTimeMillis();
        for (int i = 0; i < 100; i++) {
            jedis.set("key" + i, "val" + i);
            jedis.del("key"+i);
        }
        // 記錄執(zhí)行結(jié)束時(shí)間
        long endTime = System.currentTimeMillis();
        System.out.println("執(zhí)行耗時(shí):" + (endTime - beginTime) + "毫秒");
    }
}

以上程序執(zhí)行結(jié)果為:

執(zhí)行耗時(shí):17276毫秒

從以上的結(jié)果可以看出,管道的執(zhí)行時(shí)間是 297 毫秒缨恒,而普通命令執(zhí)行時(shí)間是 17276 毫秒,管道技術(shù)要比普通的執(zhí)行大約快了 58 倍轮听。

7.避免大量數(shù)據(jù)同時(shí)失效

Redis 過(guò)期鍵值刪除使用的是貪心策略骗露,它每秒會(huì)進(jìn)行 10 次過(guò)期掃描,此配置可在 redis.conf 進(jìn)行配置血巍,默認(rèn)值是 hz 10萧锉,Redis 會(huì)隨機(jī)抽取 20 個(gè)值,刪除這 20 個(gè)鍵中過(guò)期的鍵述寡,如果過(guò)期 key 的比例超過(guò) 25% 柿隙,重復(fù)執(zhí)行此流程,如下圖所示:

image

如果在大型系統(tǒng)中有大量緩存在同一時(shí)間同時(shí)過(guò)期鲫凶,那么會(huì)導(dǎo)致 Redis 循環(huán)多次持續(xù)掃描刪除過(guò)期字典禀崖,直到過(guò)期字典中過(guò)期鍵值被刪除的比較稀疏為止,而在整個(gè)執(zhí)行過(guò)程會(huì)導(dǎo)致 Redis 的讀寫(xiě)出現(xiàn)明顯的卡頓螟炫,卡頓的另一種原因是內(nèi)存管理器需要頻繁回收內(nèi)存頁(yè)波附,因此也會(huì)消耗一定的 CPU。

為了避免這種卡頓現(xiàn)象的產(chǎn)生昼钻,我們需要預(yù)防大量的緩存在同一時(shí)刻一起過(guò)期掸屡,就簡(jiǎn)單的解決方案就是在過(guò)期時(shí)間的基礎(chǔ)上添加一個(gè)指定范圍的隨機(jī)數(shù)。

8.客戶端使用優(yōu)化

在客戶端的使用上我們除了要盡量使用 Pipeline 的技術(shù)外然评,還需要注意要盡量使用 Redis 連接池仅财,而不是頻繁創(chuàng)建銷毀 Redis 連接,這樣就可以減少網(wǎng)絡(luò)傳輸次數(shù)和減少了非必要調(diào)用指令碗淌。

9.限制 Redis 內(nèi)存大小

在 64 位操作系統(tǒng)中 Redis 的內(nèi)存大小是沒(méi)有限制的盏求,也就是配置項(xiàng) maxmemory <bytes> 是被注釋掉的,這樣就會(huì)導(dǎo)致在物理內(nèi)存不足時(shí)贯莺,使用 swap 空間既交換空間风喇,而當(dāng)操心系統(tǒng)將 Redis 所用的內(nèi)存分頁(yè)移至 swap 空間時(shí),將會(huì)阻塞 Redis 進(jìn)程缕探,導(dǎo)致 Redis 出現(xiàn)延遲魂莫,從而影響 Redis 的整體性能。因此我們需要限制 Redis 的內(nèi)存大小為一個(gè)固定的值爹耗,當(dāng) Redis 的運(yùn)行到達(dá)此值時(shí)會(huì)觸發(fā)內(nèi)存淘汰策略耙考,內(nèi)存淘汰策略在 Redis 4.0 之后有 8 種

  1. noeviction:不淘汰任何數(shù)據(jù)谜喊,當(dāng)內(nèi)存不足時(shí),新增操作會(huì)報(bào)錯(cuò)倦始,Redis 默認(rèn)內(nèi)存淘汰策略斗遏;
  2. allkeys-lru:淘汰整個(gè)鍵值中最久未使用的鍵值;
  3. allkeys-random:隨機(jī)淘汰任意鍵值;
  4. volatile-lru:淘汰所有設(shè)置了過(guò)期時(shí)間的鍵值中最久未使用的鍵值鞋邑;
  5. volatile-random:隨機(jī)淘汰設(shè)置了過(guò)期時(shí)間的任意鍵值诵次;
  6. volatile-ttl:優(yōu)先淘汰更早過(guò)期的鍵值。

在 Redis 4.0 版本中又新增了 2 種淘汰策略:

  1. volatile-lfu:淘汰所有設(shè)置了過(guò)期時(shí)間的鍵值中枚碗,最少使用的鍵值逾一;
  2. allkeys-lfu:淘汰整個(gè)鍵值中最少使用的鍵值。

其中 allkeys-xxx 表示從所有的鍵值中淘汰數(shù)據(jù)肮雨,而 volatile-xxx 表示從設(shè)置了過(guò)期鍵的鍵值中淘汰數(shù)據(jù)遵堵。

我們可以根據(jù)實(shí)際的業(yè)務(wù)情況進(jìn)行設(shè)置尔觉,默認(rèn)的淘汰策略不淘汰任何數(shù)據(jù)狞洋,在新增時(shí)會(huì)報(bào)錯(cuò)薄榛。

10.使用物理機(jī)而非虛擬機(jī)

在虛擬機(jī)中運(yùn)行 Redis 服務(wù)器蹋宦,因?yàn)楹臀锢頇C(jī)共享一個(gè)物理網(wǎng)口种樱,并且一臺(tái)物理機(jī)可能有多個(gè)虛擬機(jī)在運(yùn)行叨恨,因此在內(nèi)存占用上和網(wǎng)絡(luò)延遲方面都會(huì)有很糟糕的表現(xiàn)午磁,我們可以通過(guò) ./redis-cli --intrinsic-latency 100 命令查看延遲時(shí)間莺戒,如果對(duì) Redis 的性能有較高要求的話呀舔,應(yīng)盡可能在物理機(jī)上直接部署 Redis 服務(wù)器弥虐。

11.檢查數(shù)據(jù)持久化策略

Redis 的持久化策略是將內(nèi)存數(shù)據(jù)復(fù)制到硬盤上,這樣才可以進(jìn)行容災(zāi)恢復(fù)或者數(shù)據(jù)遷移媚赖,但維護(hù)此持久化的功能霜瘪,需要很大的性能開(kāi)銷。

在 Redis 4.0 之后惧磺,Redis 有 3 種持久化的方式:

  • RDB(Redis DataBase颖对,快照方式)將某一個(gè)時(shí)刻的內(nèi)存數(shù)據(jù),以二進(jìn)制的方式寫(xiě)入磁盤磨隘;
  • AOF(Append Only File缤底,文件追加方式),記錄所有的操作命令番捂,并以文本的形式追加到文件中个唧;
  • 混合持久化方式,Redis 4.0 之后新增的方式设预,混合持久化是結(jié)合了 RDB 和 AOF 的優(yōu)點(diǎn)徙歼,在寫(xiě)入的時(shí)候,先把當(dāng)前的數(shù)據(jù)以 RDB 的形式寫(xiě)入文件的開(kāi)頭,再將后續(xù)的操作命令以 AOF 的格式存入文件魄梯,這樣既能保證 Redis 重啟時(shí)的速度桨螺,又能減低數(shù)據(jù)丟失的風(fēng)險(xiǎn)。

RDB 和 AOF 持久化各有利弊酿秸,RDB 可能會(huì)導(dǎo)致一定時(shí)間內(nèi)的數(shù)據(jù)丟失灭翔,而 AOF 由于文件較大則會(huì)影響 Redis 的啟動(dòng)速度,為了能同時(shí)擁有 RDB 和 AOF 的優(yōu)點(diǎn)辣苏,Redis 4.0 之后新增了混合持久化的方式肝箱,因此我們?cè)诒仨氁M(jìn)行持久化操作時(shí),應(yīng)該選擇混合持久化的方式稀蟋。

查詢是否開(kāi)啟混合持久化可以使用 config get aof-use-rdb-preamble 命令狭园,執(zhí)行結(jié)果如下圖所示:

image

其中 yes 表示已經(jīng)開(kāi)啟混合持久化,no 表示關(guān)閉糊治,Redis 5.0 默認(rèn)值為 yes。如果是其他版本的 Redis 首先需要檢查一下罚舱,是否已經(jīng)開(kāi)啟了混合持久化井辜,如果關(guān)閉的情況下,可以通過(guò)以下兩種方式開(kāi)啟:

  • 通過(guò)命令行開(kāi)啟
  • 通過(guò)修改 Redis 配置文件開(kāi)啟

① 通過(guò)命令行開(kāi)啟

使用命令 config set aof-use-rdb-preamble yes 執(zhí)行結(jié)果如下圖所示:

image

命令行設(shè)置配置的缺點(diǎn)是重啟 Redis 服務(wù)之后管闷,設(shè)置的配置就會(huì)失效粥脚。

② 通過(guò)修改 Redis 配置文件開(kāi)啟

在 Redis 的根路徑下找到 redis.conf 文件,把配置文件中的 aof-use-rdb-preamble no 改為 aof-use-rdb-preamble yes 如下圖所示:

image

配置完成之后包个,需要重啟 Redis 服務(wù)器刷允,配置才能生效,但修改配置文件的方式碧囊,在每次重啟 Redis 服務(wù)之后树灶,配置信息不會(huì)丟失。

需要注意的是糯而,在非必須進(jìn)行持久化的業(yè)務(wù)中天通,可以關(guān)閉持久化,這樣可以有效的提升 Redis 的運(yùn)行速度熄驼,不會(huì)出現(xiàn)間歇性卡頓的困擾像寒。

12.禁用 THP 特性

Linux kernel 在 2.6.38 內(nèi)核增加了 Transparent Huge Pages (THP) 特性 ,支持大內(nèi)存頁(yè) 2MB 分配瓜贾,默認(rèn)開(kāi)啟诺祸。

當(dāng)開(kāi)啟了 THP 時(shí),fork 的速度會(huì)變慢祭芦,fork 之后每個(gè)內(nèi)存頁(yè)從原來(lái) 4KB 變?yōu)?2MB筷笨,會(huì)大幅增加重寫(xiě)期間父進(jìn)程內(nèi)存消耗。同時(shí)每次寫(xiě)命令引起的復(fù)制內(nèi)存頁(yè)單位放大了 512 倍,會(huì)拖慢寫(xiě)操作的執(zhí)行時(shí)間奥秆,導(dǎo)致大量寫(xiě)操作慢查詢逊彭。例如簡(jiǎn)單的 incr 命令也會(huì)出現(xiàn)在慢查詢中,因此 Redis 建議將此特性進(jìn)行禁用构订,禁用方法如下:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

為了使機(jī)器重啟后 THP 配置依然生效侮叮,可以在 /etc/rc.local 中追加 echo never > /sys/kernel/mm/transparent_hugepage/enabled

13.使用分布式架構(gòu)來(lái)增加讀寫(xiě)速度

Redis 分布式架構(gòu)有三個(gè)重要的手段:

  • 主從同步
  • 哨兵模式
  • Redis Cluster 集群

使用主從同步功能我們可以把寫(xiě)入放到主庫(kù)上執(zhí)行悼瘾,把讀功能轉(zhuǎn)移到從服務(wù)上囊榜,因此就可以在單位時(shí)間內(nèi)處理更多的請(qǐng)求,從而提升的 Redis 整體的運(yùn)行速度亥宿。

而哨兵模式是對(duì)于主從功能的升級(jí)卸勺,但當(dāng)主節(jié)點(diǎn)奔潰之后,無(wú)需人工干預(yù)就能自動(dòng)恢復(fù) Redis 的正常使用烫扼。

Redis Cluster 是 Redis 3.0 正式推出的曙求,Redis 集群是通過(guò)將數(shù)據(jù)庫(kù)分散存儲(chǔ)到多個(gè)節(jié)點(diǎn)上來(lái)平衡各個(gè)節(jié)點(diǎn)的負(fù)載壓力。

Redis Cluster 采用虛擬哈希槽分區(qū)映企,所有的鍵根據(jù)哈希函數(shù)映射到 0 ~ 16383 整數(shù)槽內(nèi)悟狱,計(jì)算公式:slot = CRC16(key) & 16383,每一個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù)堰氓。這樣 Redis 就可以把讀寫(xiě)壓力從一臺(tái)服務(wù)器挤渐,分散給多臺(tái)服務(wù)器了,因此性能會(huì)有很大的提升双絮。

在這三個(gè)功能中浴麻,我們只需要使用一個(gè)就行了,毫無(wú)疑問(wèn) Redis Cluster 應(yīng)該是首選的實(shí)現(xiàn)方案囤攀,它可以把讀寫(xiě)壓力自動(dòng)的分擔(dān)給更多的服務(wù)器软免,并且擁有自動(dòng)容災(zāi)的能力。

【END】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抚岗,一起剝皮案震驚了整個(gè)濱河市或杠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宣蔚,老刑警劉巖向抢,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胚委,居然都是意外死亡挟鸠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門亩冬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)艘希,“玉大人硼身,你說(shuō)我怎么就攤上這事「蚕恚” “怎么了佳遂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撒顿。 經(jīng)常有香客問(wèn)我丑罪,道長(zhǎng),這世上最難降的妖魔是什么凤壁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任吩屹,我火速辦了婚禮,結(jié)果婚禮上拧抖,老公的妹妹穿的比我還像新娘煤搜。我一直安慰自己,他們只是感情好唧席,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布擦盾。 她就那樣靜靜地躺著,像睡著了一般淌哟。 火紅的嫁衣襯著肌膚如雪厌衙。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,821評(píng)論 1 314
  • 那天绞绒,我揣著相機(jī)與錄音,去河邊找鬼榕暇。 笑死蓬衡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彤枢。 我是一名探鬼主播狰晚,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缴啡!你這毒婦竟也來(lái)了壁晒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤业栅,失蹤者是張志新(化名)和其女友劉穎秒咐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碘裕,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡携取,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帮孔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雷滋。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晤斩,到底是詐尸還是另有隱情焕檬,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布澳泵,位于F島的核電站实愚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏烹俗。R本人自食惡果不足惜爆侣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幢妄。 院中可真熱鬧兔仰,春花似錦、人聲如沸蕉鸳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潮尝。三九已至榕吼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勉失,已是汗流浹背羹蚣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乱凿,地道東北人顽素。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像徒蟆,于是被迫代替她去往敵國(guó)和親胁出。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Redis優(yōu)點(diǎn): 少量數(shù)據(jù)存儲(chǔ)段审,高速讀寫(xiě)訪問(wèn)全蝶。通過(guò)數(shù)據(jù)全部in-momery 的方式來(lái)保證高速訪問(wèn),同時(shí)提供數(shù)據(jù)落...
    one_zheng閱讀 559評(píng)論 0 1
  • redis 簡(jiǎn)介 簡(jiǎn)單來(lái)說(shuō) redis 就是一個(gè)數(shù)據(jù)庫(kù)寺枉,不過(guò)與傳統(tǒng)數(shù)據(jù)庫(kù)不同的是 redis 的數(shù)據(jù)是存在內(nèi)存中的...
    綠葉悠閱讀 400評(píng)論 1 0
  • 一抑淫、Redis持久化概述 持久化的功能:Redis是內(nèi)存數(shù)據(jù)庫(kù),數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中姥闪,為了避免進(jìn)程退出導(dǎo)致數(shù)據(jù)的永...
    心似南風(fēng)閱讀 932評(píng)論 0 1
  • 現(xiàn)在甘畅,簡(jiǎn)直埂蕊,頭痛得很往弓。最近這段時(shí)間渾渾噩噩,作息紊亂蓄氧,想要給自己立flag和plan函似,但是執(zhí)行的并不好,我在想可能...
    所有的昵稱都已經(jīng)被占用了閱讀 101評(píng)論 0 0
  • 1 我想要一個(gè)沒(méi)有夢(mèng)境的夜晚,空白的一片堂氯,一覺(jué)睡到天亮蔑担。 可是經(jīng)歷過(guò)二十多年的日日夜夜我卻一直做著不同或相同的夢(mèng)。...
    不吃飯的桃閱讀 426評(píng)論 1 13