0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Redis更節(jié)省內(nèi)存?

jf_ro2CN3Fa ? 來(lái)源:水滴與銀彈 ? 作者:水滴與銀彈 ? 2022-12-19 15:41 ? 次閱讀


前言

這篇文章我想和你聊一聊 Redis 的最佳實(shí)踐。

你的項(xiàng)目或許已經(jīng)使用 Redis 很長(zhǎng)時(shí)間了,但在使用過(guò)程中,你可能還會(huì)或多或少地遇到以下問(wèn)題:

  • 我的 Redis 內(nèi)存為什么增長(zhǎng)這么快?
  • 為什么我的 Redis 操作延遲變大了?
  • 如何降低 Redis 故障發(fā)生的頻率?
  • 日常運(yùn)維 Redis 需要注意什么?
  • 部署 Redis 時(shí),如何做好資源規(guī)劃?
  • Redis 監(jiān)控重點(diǎn)要關(guān)注哪些指標(biāo)?

尤其是當(dāng)你的項(xiàng)目越來(lái)越依賴(lài) Redis 時(shí),這些問(wèn)題就變得尤為重要。

此時(shí),你迫切需要一份「最佳實(shí)踐指南」 。

這篇文章,我將從以下七個(gè)維度,帶你「全面」分析 Redis 的最佳實(shí)踐優(yōu)化:

  • 內(nèi)存
  • 性能
  • 高可靠
  • 日常運(yùn)維
  • 資源規(guī)劃
  • 監(jiān)控
  • 安全

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

如何使用 Redis 更節(jié)省內(nèi)存?

首先,我們來(lái)看一下 Redis 內(nèi)存方面的優(yōu)化。

眾所周知,Redis 的性能之所以如此之高,原因就在于它的數(shù)據(jù)都存儲(chǔ)在「內(nèi)存」中,所以訪(fǎng)問(wèn) Redis 中的數(shù)據(jù)速度極快。

但從資源利用率層面來(lái)說(shuō),機(jī)器的內(nèi)存資源相比于磁盤(pán),還是比較昂貴的。

當(dāng)你的業(yè)務(wù)應(yīng)用在 Redis 中存儲(chǔ)數(shù)據(jù)很少時(shí),你可能并不太關(guān)心內(nèi)存資源的使用情況。但隨著業(yè)務(wù)的發(fā)展,你的業(yè)務(wù)存儲(chǔ)在 Redis 中的數(shù)據(jù)就會(huì)越來(lái)越多。

如果沒(méi)有提前制定好內(nèi)存優(yōu)化策略,那么等業(yè)務(wù)開(kāi)始增長(zhǎng)時(shí),Redis 占用的內(nèi)存也會(huì)開(kāi)始膨脹。

所以,提前制定合理的內(nèi)存優(yōu)化策略,對(duì)于資源利用率的提升是很有必要的。

那在使用 Redis 時(shí),怎樣做才能更節(jié)省內(nèi)存呢?這里我給你總結(jié)了 6 點(diǎn)建議,我們依次來(lái)看:

1) 控制 key 的長(zhǎng)度

最簡(jiǎn)單直接的內(nèi)存優(yōu)化,就是控制 key 的長(zhǎng)度。

在開(kāi)發(fā)業(yè)務(wù)時(shí),你需要提前預(yù)估整個(gè) Redis 中寫(xiě)入 key 的數(shù)量,如果 key 數(shù)量達(dá)到了百萬(wàn)級(jí)別,那么,過(guò)長(zhǎng)的 key 名也會(huì)占用過(guò)多的內(nèi)存空間。

所以,你需要保證 key 在簡(jiǎn)單、清晰的前提下,盡可能把 key 定義得短一些。

例如,原有的 key 為 user123,則可以?xún)?yōu)化為 u123。

這樣一來(lái),你的 Redis 就可以節(jié)省大量的內(nèi)存,這個(gè)方案對(duì)內(nèi)存的優(yōu)化非常直接和高效。

2) 避免存儲(chǔ) bigkey

除了控制 key 的長(zhǎng)度之外,你同樣需要關(guān)注 value 的大小,如果大量存儲(chǔ) bigkey,也會(huì)導(dǎo)致 Redis 內(nèi)存增長(zhǎng)過(guò)快。

除此之外,客戶(hù)端在讀寫(xiě) bigkey 時(shí),還有產(chǎn)生性能問(wèn)題(下文會(huì)具體詳述)。

所以,你要避免在 Redis 中存儲(chǔ) bigkey,我給你的建議是:

  • String:大小控制在 10KB 以下
  • List/Hash/Set/ZSet:元素?cái)?shù)量控制在 1 萬(wàn)以下

3) 選擇合適的數(shù)據(jù)類(lèi)型

Redis 提供了豐富的數(shù)據(jù)類(lèi)型,這些數(shù)據(jù)類(lèi)型在實(shí)現(xiàn)上,也對(duì)內(nèi)存使用做了優(yōu)化。具體來(lái)說(shuō)就是,一種數(shù)據(jù)類(lèi)型對(duì)應(yīng)多種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn):

1082542e-7f1d-11ed-8abf-dac502259ad0.png

例如,String、Set 在存儲(chǔ) int 數(shù)據(jù)時(shí),會(huì)采用整數(shù)編碼存儲(chǔ)。Hash、ZSet 在元素?cái)?shù)量比較少時(shí)(可配置),會(huì)采用壓縮列表(ziplist)存儲(chǔ),在存儲(chǔ)比較多的數(shù)據(jù)時(shí),才會(huì)轉(zhuǎn)換為哈希表和跳表。

作者這么設(shè)計(jì)的原因,就是為了進(jìn)一步節(jié)約內(nèi)存資源。

那么你在存儲(chǔ)數(shù)據(jù)時(shí),就可以利用這些特性來(lái)優(yōu)化 Redis 的內(nèi)存。這里我給你的建議如下:

  • String、Set:盡可能存儲(chǔ) int 類(lèi)型數(shù)據(jù)
  • Hash、ZSet:存儲(chǔ)的元素?cái)?shù)量控制在轉(zhuǎn)換閾值之下,以壓縮列表存儲(chǔ),節(jié)約內(nèi)存

4) 把 Redis 當(dāng)作緩存使用

Redis 數(shù)據(jù)存儲(chǔ)在內(nèi)存中,這也意味著其資源是有限的。你在使用 Redis 時(shí),要把它當(dāng)做緩存來(lái)使用,而不是數(shù)據(jù)庫(kù)。

所以,你的應(yīng)用寫(xiě)入到 Redis 中的數(shù)據(jù),盡可能地都設(shè)置「過(guò)期時(shí)間」。

業(yè)務(wù)應(yīng)用在 Redis 中查不到數(shù)據(jù)時(shí),再?gòu)暮蠖藬?shù)據(jù)庫(kù)中加載到 Redis 中。

108fd126-7f1d-11ed-8abf-dac502259ad0.jpg

采用這種方案,可以讓 Redis 中只保留經(jīng)常訪(fǎng)問(wèn)的「熱數(shù)據(jù)」,內(nèi)存利用率也會(huì)比較高。

5) 實(shí)例設(shè)置 maxmemory + 淘汰策略

雖然你的 Redis key 都設(shè)置了過(guò)期時(shí)間,但如果你的業(yè)務(wù)應(yīng)用寫(xiě)入量很大,并且過(guò)期時(shí)間設(shè)置得比較久,那么短期間內(nèi) Redis 的內(nèi)存依舊會(huì)快速增長(zhǎng)。

如果不控制 Redis 的內(nèi)存上限,也會(huì)導(dǎo)致使用過(guò)多的內(nèi)存資源。

對(duì)于這種場(chǎng)景,你需要提前預(yù)估業(yè)務(wù)數(shù)據(jù)量,然后給這個(gè)實(shí)例設(shè)置 maxmemory 控制實(shí)例的內(nèi)存上限,這樣可以避免 Redis 的內(nèi)存持續(xù)膨脹。

配置了 maxmemory,此時(shí)你還要設(shè)置數(shù)據(jù)淘汰策略,而淘汰策略如何選擇,你需要結(jié)合你的業(yè)務(wù)特點(diǎn)來(lái)決定:

  • volatile-lru / allkeys-lru:優(yōu)先保留最近訪(fǎng)問(wèn)過(guò)的數(shù)據(jù)
  • volatile-lfu / allkeys-lfu:優(yōu)先保留訪(fǎng)問(wèn)次數(shù)最頻繁的數(shù)據(jù)(4.0+版本支持)
  • volatile-ttl :優(yōu)先淘汰即將過(guò)期的數(shù)據(jù)
  • volatile-random / allkeys-random:隨機(jī)淘汰數(shù)據(jù)

6) 數(shù)據(jù)壓縮后寫(xiě)入 Redis

以上方案基本涵蓋了 Redis 內(nèi)存優(yōu)化的各個(gè)方面。

如果你還想進(jìn)一步優(yōu)化 Redis 內(nèi)存,你還可以在業(yè)務(wù)應(yīng)用中先將數(shù)據(jù)壓縮,再寫(xiě)入到 Redis 中(例如采用 snappy、gzip 等壓縮算法)。

當(dāng)然,壓縮存儲(chǔ)的數(shù)據(jù),客戶(hù)端在讀取時(shí)還需要解壓縮,在這期間會(huì)消耗更多 CPU 資源,你需要根據(jù)實(shí)際情況進(jìn)行權(quán)衡。

以上就是「節(jié)省內(nèi)存資源」方面的實(shí)踐優(yōu)化,是不是都比較簡(jiǎn)單?

下面我們來(lái)看「性能」方面的優(yōu)化。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

如何持續(xù)發(fā)揮 Redis 的高性能?

當(dāng)你的系統(tǒng)決定引入 Redis 時(shí),想必看中它最關(guān)鍵的一點(diǎn)就是:性能 。

我們知道,一個(gè)單機(jī)版 Redis 就可以達(dá)到 10W QPS,這么高的性能,也意味著如果在使用過(guò)程中發(fā)生延遲情況,就會(huì)與我們的預(yù)期不符。

所以,在使用 Redis 時(shí),如何持續(xù)發(fā)揮它的高性能,避免操作延遲的情況發(fā)生,也是我們的關(guān)注焦點(diǎn)。

在這方面,我給你總結(jié)了 13 條建議:

1) 避免存儲(chǔ) bigkey

存儲(chǔ) bigkey 除了前面講到的使用過(guò)多內(nèi)存之外,對(duì) Redis 性能也會(huì)有很大影響。

由于 Redis 處理請(qǐng)求是單線(xiàn)程的,當(dāng)你的應(yīng)用在寫(xiě)入一個(gè) bigkey 時(shí),更多時(shí)間將消耗在「內(nèi)存分配」上,這時(shí)操作延遲就會(huì)增加。同樣地,刪除一個(gè) bigkey 在「釋放內(nèi)存」時(shí),也會(huì)發(fā)生耗時(shí)。

而且,當(dāng)你在讀取這個(gè) bigkey 時(shí),也會(huì)在「網(wǎng)絡(luò)數(shù)據(jù)傳輸」上花費(fèi)更多時(shí)間,此時(shí)后面待執(zhí)行的請(qǐng)求就會(huì)發(fā)生排隊(duì),Redis 性能下降。

109fe3c2-7f1d-11ed-8abf-dac502259ad0.jpg

所以,你的業(yè)務(wù)應(yīng)用盡量不要存儲(chǔ) bigkey,避免操作延遲發(fā)生。

如果你確實(shí)有存儲(chǔ) bigkey 的需求,你可以把 bigkey 拆分為多個(gè)小 key 存儲(chǔ)。

2) 開(kāi)啟 lazy-free 機(jī)制

如果你無(wú)法避免存儲(chǔ) bigkey,那么我建議你開(kāi)啟 Redis 的 lazy-free 機(jī)制。(4.0+版本支持)

當(dāng)開(kāi)啟這個(gè)機(jī)制后,Redis 在刪除一個(gè) bigkey 時(shí),釋放內(nèi)存的耗時(shí)操作,將會(huì)放到后臺(tái)線(xiàn)程中去執(zhí)行,這樣可以在最大程度上,避免對(duì)主線(xiàn)程的影響。

10ab5a5e-7f1d-11ed-8abf-dac502259ad0.jpg

3) 不使用復(fù)雜度過(guò)高的命令

Redis 是單線(xiàn)程模型處理請(qǐng)求,除了操作 bigkey 會(huì)導(dǎo)致后面請(qǐng)求發(fā)生排隊(duì)之外,在執(zhí)行復(fù)雜度過(guò)高的命令時(shí),也會(huì)發(fā)生這種情況。

因?yàn)閳?zhí)行復(fù)雜度過(guò)高的命令,會(huì)消耗更多的 CPU 資源,主線(xiàn)程中的其它請(qǐng)求只能等待,這時(shí)也會(huì)發(fā)生排隊(duì)延遲。

所以,你需要避免執(zhí)行例如 SORT、SINTER、SINTERSTORE、ZUNIONSTORE、ZINTERSTORE 等聚合類(lèi)命令。

對(duì)于這種聚合類(lèi)操作,我建議你把它放到客戶(hù)端來(lái)執(zhí)行,不要讓 Redis 承擔(dān)太多的計(jì)算工作。

4) 執(zhí)行 O(N) 命令時(shí),關(guān)注 N 的大小

規(guī)避使用復(fù)雜度過(guò)高的命令,就可以高枕無(wú)憂(yōu)了么?

答案是否定的。

當(dāng)你在執(zhí)行 O(N) 命令時(shí),同樣需要注意 N 的大小。

如果一次性查詢(xún)過(guò)多的數(shù)據(jù),也會(huì)在網(wǎng)絡(luò)傳輸過(guò)程中耗時(shí)過(guò)長(zhǎng),操作延遲變大。

所以,對(duì)于容器類(lèi)型(List/Hash/Set/ZSet),在元素?cái)?shù)量未知的情況下,一定不要無(wú)腦執(zhí)行 LRANGE key 0 -1 / HGETALL / SMEMBERS / ZRANGE key 0 -1。

在查詢(xún)數(shù)據(jù)時(shí),你要遵循以下原則:

  1. 先查詢(xún)數(shù)據(jù)元素的數(shù)量(LLEN/HLEN/SCARD/ZCARD)
  2. 元素?cái)?shù)量較少,可一次性查詢(xún)?nèi)繑?shù)據(jù)
  3. 元素?cái)?shù)量非常多,分批查詢(xún)數(shù)據(jù)(LRANGE/HASCAN/SSCAN/ZSCAN)

5) 關(guān)注 DEL 時(shí)間復(fù)雜度

你沒(méi)看錯(cuò),在刪除一個(gè) key 時(shí),如果姿勢(shì)不對(duì),也有可能影響到 Redis 性能。

刪除一個(gè) key,我們通常使用的是 DEL 命令,回想一下,你覺(jué)得 DEL 的時(shí)間復(fù)雜度是多少?

O(1) ?其實(shí)不一定。

當(dāng)你刪除的是一個(gè) String 類(lèi)型 key 時(shí),時(shí)間復(fù)雜度確實(shí)是 O(1)。

但當(dāng)你要?jiǎng)h除的 key 是 List/Hash/Set/ZSet 類(lèi)型,它的復(fù)雜度其實(shí)為 O(N),N 代表元素個(gè)數(shù)。

也就是說(shuō),刪除一個(gè) key,其元素?cái)?shù)量越多,執(zhí)行 DEL 也就越慢!

原因在于,刪除大量元素時(shí),需要依次回收每個(gè)元素的內(nèi)存,元素越多,花費(fèi)的時(shí)間也就越久!

而且,這個(gè)過(guò)程默認(rèn)是在主線(xiàn)程中執(zhí)行的,這勢(shì)必會(huì)阻塞主線(xiàn)程,產(chǎn)生性能問(wèn)題。

那刪除這種元素比較多的 key,如何處理呢?

我給你的建議是,分批刪除:

  • List類(lèi)型:執(zhí)行多次 LPOP/RPOP,直到所有元素都刪除完成
  • Hash/Set/ZSet類(lèi)型:先執(zhí)行 HSCAN/SSCAN/SCAN 查詢(xún)?cè)?,再?zhí)行 HDEL/SREM/ZREM 依次刪除每個(gè)元素

沒(méi)想到吧?一個(gè)小小的刪除操作,稍微不小心,也有可能引發(fā)性能問(wèn)題,你在操作時(shí)需要格外注意。

6) 批量命令代替單個(gè)命令

當(dāng)你需要一次性操作多個(gè) key 時(shí),你應(yīng)該使用批量命令來(lái)處理。

批量操作相比于多次單個(gè)操作的優(yōu)勢(shì)在于,可以顯著減少客戶(hù)端、服務(wù)端的來(lái)回網(wǎng)絡(luò) IO 次數(shù)。

所以我給你的建議是:

  • String / Hash 使用 MGET/MSET 替代 GET/SET,HMGET/HMSET 替代 HGET/HSET
  • 其它數(shù)據(jù)類(lèi)型使用 Pipeline,打包一次性發(fā)送多個(gè)命令到服務(wù)端執(zhí)行
10be76f2-7f1d-11ed-8abf-dac502259ad0.jpg

7) 避免集中過(guò)期 key

Redis 清理過(guò)期 key 是采用定時(shí) + 懶惰的方式來(lái)做的,而且這個(gè)過(guò)程都是在主線(xiàn)程中執(zhí)行。

如果你的業(yè)務(wù)存在大量 key 集中過(guò)期的情況,那么 Redis 在清理過(guò)期 key 時(shí),也會(huì)有阻塞主線(xiàn)程的風(fēng)險(xiǎn)。

10ce03ce-7f1d-11ed-8abf-dac502259ad0.jpg

想要避免這種情況發(fā)生,你可以在設(shè)置過(guò)期時(shí)間時(shí),增加一個(gè)隨機(jī)時(shí)間,把這些 key 的過(guò)期時(shí)間打散,從而降低集中過(guò)期對(duì)主線(xiàn)程的影響。

8) 使用長(zhǎng)連接操作 Redis,合理配置連接池

你的業(yè)務(wù)應(yīng)該使用長(zhǎng)連接操作 Redis,避免短連接。

當(dāng)使用短連接操作 Redis 時(shí),每次都需要經(jīng)過(guò) TCP 三次握手、四次揮手,這個(gè)過(guò)程也會(huì)增加操作耗時(shí)。

同時(shí),你的客戶(hù)端應(yīng)該使用連接池的方式訪(fǎng)問(wèn) Redis,并設(shè)置合理的參數(shù),長(zhǎng)時(shí)間不操作 Redis 時(shí),需及時(shí)釋放連接資源。

9) 只使用 db0

盡管 Redis 提供了 16 個(gè) db,但我只建議你使用 db0。

為什么呢?我總結(jié)了以下 3 點(diǎn)原因:

  1. 在一個(gè)連接上操作多個(gè) db 數(shù)據(jù)時(shí),每次都需要先執(zhí)行 SELECT,這會(huì)給 Redis 帶來(lái)額外的壓力
  2. 使用多個(gè) db 的目的是,按不同業(yè)務(wù)線(xiàn)存儲(chǔ)數(shù)據(jù),那為何不拆分多個(gè)實(shí)例存儲(chǔ)呢?拆分多個(gè)實(shí)例部署,多個(gè)業(yè)務(wù)線(xiàn)不會(huì)互相影響,還能提高 Redis 的訪(fǎng)問(wèn)性能
  3. Redis Cluster 只支持 db0,如果后期你想要遷移到 Redis Cluster,遷移成本高

10) 使用讀寫(xiě)分離 + 分片集群

如果你的業(yè)務(wù)讀請(qǐng)求量很大,那么可以采用部署多個(gè)從庫(kù)的方式,實(shí)現(xiàn)讀寫(xiě)分離,讓 Redis 的從庫(kù)分擔(dān)讀壓力,進(jìn)而提升性能。

10edbf16-7f1d-11ed-8abf-dac502259ad0.jpg

如果你的業(yè)務(wù)寫(xiě)請(qǐng)求量很大,單個(gè) Redis 實(shí)例已無(wú)法支撐這么大的寫(xiě)流量,那么此時(shí)你需要使用分片集群,分擔(dān)寫(xiě)壓力。

10fe060a-7f1d-11ed-8abf-dac502259ad0.jpg

11) 不開(kāi)啟 AOF 或 AOF 配置為每秒刷盤(pán)

如果對(duì)于丟失數(shù)據(jù)不敏感的業(yè)務(wù),我建議你不開(kāi)啟 AOF,避免 AOF 寫(xiě)磁盤(pán)拖慢 Redis 的性能。

如果確實(shí)需要開(kāi)啟 AOF,那么我建議你配置為 appendfsync everysec,把數(shù)據(jù)持久化的刷盤(pán)操作,放到后臺(tái)線(xiàn)程中去執(zhí)行,盡量降低 Redis 寫(xiě)磁盤(pán)對(duì)性能的影響。

12) 使用物理機(jī)部署 Redis

Redis 在做數(shù)據(jù)持久化時(shí),采用創(chuàng)建子進(jìn)程的方式進(jìn)行。

而創(chuàng)建子進(jìn)程會(huì)調(diào)用操作系統(tǒng)的 fork 系統(tǒng)調(diào)用,這個(gè)系統(tǒng)調(diào)用的執(zhí)行耗時(shí),與系統(tǒng)環(huán)境有關(guān)。

虛擬機(jī)環(huán)境執(zhí)行 fork 的耗時(shí),要比物理機(jī)慢得多,所以你的 Redis 應(yīng)該盡可能部署在物理機(jī)上。

13) 關(guān)閉操作系統(tǒng)內(nèi)存大頁(yè)機(jī)制

Linux 操作系統(tǒng)提供了內(nèi)存大頁(yè)機(jī)制,其特點(diǎn)在于,每次應(yīng)用程序向操作系統(tǒng)申請(qǐng)內(nèi)存時(shí),申請(qǐng)單位由之前的 4KB 變?yōu)榱?2MB。

這會(huì)導(dǎo)致什么問(wèn)題呢?

當(dāng) Redis 在做數(shù)據(jù)持久化時(shí),會(huì)先 fork 一個(gè)子進(jìn)程,此時(shí)主進(jìn)程和子進(jìn)程共享相同的內(nèi)存地址空間。

當(dāng)主進(jìn)程需要修改現(xiàn)有數(shù)據(jù)時(shí),會(huì)采用寫(xiě)時(shí)復(fù)制(Copy On Write)的方式進(jìn)行操作,在這個(gè)過(guò)程中,需要重新申請(qǐng)內(nèi)存。

如果申請(qǐng)內(nèi)存單位變?yōu)榱?2MB,那么勢(shì)必會(huì)增加內(nèi)存申請(qǐng)的耗時(shí),如果此時(shí)主進(jìn)程有大量寫(xiě)操作,需要修改原有的數(shù)據(jù),那么在此期間,操作延遲就會(huì)變大。

110c5336-7f1d-11ed-8abf-dac502259ad0.jpg

所以,為了避免出現(xiàn)這種問(wèn)題,你需要在操作系統(tǒng)上關(guān)閉內(nèi)存大頁(yè)機(jī)制。

好了,以上這些就是 Redis 「高性能」方面的實(shí)踐優(yōu)化。如果你非常關(guān)心 Redis 的性能問(wèn)題,可以結(jié)合這些方面針對(duì)性?xún)?yōu)化。

我們?cè)賮?lái)看 Redis 「可靠性」如何保證。

如何保證 Redis 的可靠性?

這里我想提醒你的是,保證 Redis 可靠性其實(shí)并不難,但難的是如何做到「持續(xù)穩(wěn)定」。

下面我會(huì)從「資源隔離」、「多副本」、「故障恢復(fù)」這三大維度,帶你分析保障 Redis 可靠性的最佳實(shí)踐。

1) 按業(yè)務(wù)線(xiàn)部署實(shí)例

提升可靠性的第一步,就是「資源隔離」。

你最好按不同的業(yè)務(wù)線(xiàn)來(lái)部署 Redis 實(shí)例,這樣當(dāng)其中一個(gè)實(shí)例發(fā)生故障時(shí),不會(huì)影響到其它業(yè)務(wù)。

這種資源隔離的方案,實(shí)施成本是最低的,但成效卻是非常大的。

2) 部署主從集群

如果你只使用單機(jī)版 Redis,那么就會(huì)存在機(jī)器宕機(jī)服務(wù)不可用的風(fēng)險(xiǎn)。

所以,你需要部署「多副本」實(shí)例,即主從集群,這樣當(dāng)主庫(kù)宕機(jī)后,依舊有從庫(kù)可以使用,避免了數(shù)據(jù)丟失的風(fēng)險(xiǎn),也降低了服務(wù)不可用的時(shí)間。

在部署主從集群時(shí),你還需要注意,主從庫(kù)需要分布在不同機(jī)器上,避免交叉部署。

這么做的原因在于,通常情況下,Redis 的主庫(kù)會(huì)承擔(dān)所有的讀寫(xiě)流量,所以我們一定要優(yōu)先保證主庫(kù)的穩(wěn)定性,即使從庫(kù)機(jī)器異常,也不要對(duì)主庫(kù)造成影響。

而且,有時(shí)我們需要對(duì) Redis 做日常維護(hù),例如數(shù)據(jù)定時(shí)備份等操作,這時(shí)你就可以只在從庫(kù)上進(jìn)行,這只會(huì)消耗從庫(kù)機(jī)器的資源,也避免了對(duì)主庫(kù)的影響。

3) 合理配置主從復(fù)制參數(shù)

在部署主從集群時(shí),如果參數(shù)配置不合理,也有可能導(dǎo)致主從復(fù)制發(fā)生問(wèn)題:

  • 主從復(fù)制中斷
  • 從庫(kù)發(fā)起全量復(fù)制,主庫(kù)性能受到影響

在這方面我給你的建議有以下 2 點(diǎn):

  1. 設(shè)置合理的 repl-backlog 參數(shù):過(guò)小的 repl-backlog 在寫(xiě)流量比較大的場(chǎng)景下,主從復(fù)制中斷會(huì)引發(fā)全量復(fù)制數(shù)據(jù)的風(fēng)險(xiǎn)
  2. 設(shè)置合理的 slave client-output-buffer-limit:當(dāng)從庫(kù)復(fù)制發(fā)生問(wèn)題時(shí),過(guò)小的 buffer 會(huì)導(dǎo)致從庫(kù)緩沖區(qū)溢出,從而導(dǎo)致復(fù)制中斷

4) 部署哨兵集群,實(shí)現(xiàn)故障自動(dòng)切換

只部署了主從節(jié)點(diǎn),但故障發(fā)生時(shí)是無(wú)法自動(dòng)切換的,所以,你還需要部署哨兵集群,實(shí)現(xiàn)故障的「自動(dòng)切換」。

而且,多個(gè)哨兵節(jié)點(diǎn)需要分布在不同機(jī)器上,實(shí)例為奇數(shù)個(gè),防止哨兵選舉失敗,影響切換時(shí)間。

以上這些就是保障 Redis「高可靠」實(shí)踐優(yōu)化,你應(yīng)該也發(fā)現(xiàn)了,這些都是部署和運(yùn)維層的優(yōu)化。

除此之外,你可能還會(huì)對(duì) Redis 做一些「日常運(yùn)維」工作,這時(shí)你要注意哪些問(wèn)題呢?

日常運(yùn)維 Redis 需要注意什么?

如果你是 DBA 運(yùn)維人員,在平時(shí)運(yùn)維 Redis 時(shí),也需要注意以下 6 個(gè)方面。****

1) 禁止使用 KEYS/FLUSHALL/FLUSHDB 命令

執(zhí)行這些命令,會(huì)長(zhǎng)時(shí)間阻塞 Redis 主線(xiàn)程,危害極大,所以你必須禁止使用它。

如果確實(shí)想使用這些命令,我給你的建議是:

  • SCAN 替換 KEYS
  • 4.0+版本可使用 FLUSHALL/FLUSHDB ASYNC,清空數(shù)據(jù)的操作放在后臺(tái)線(xiàn)程執(zhí)行

2) 掃描線(xiàn)上實(shí)例時(shí),設(shè)置休眠時(shí)間

不管你是使用 SCAN 掃描線(xiàn)上實(shí)例,還是對(duì)實(shí)例做 bigkey 統(tǒng)計(jì)分析,我建議你在掃描時(shí)一定記得設(shè)置休眠時(shí)間。

防止在掃描過(guò)程中,實(shí)例 OPS 過(guò)高對(duì) Redis 產(chǎn)生性能抖動(dòng)。

3) 慎用 MONITOR 命令

有時(shí)在排查 Redis 問(wèn)題時(shí),你會(huì)使用 MONITOR 查看 Redis 正在執(zhí)行的命令。

但如果你的 Redis OPS 比較高,那么在執(zhí)行 MONITOR 會(huì)導(dǎo)致 Redis 輸出緩沖區(qū)的內(nèi)存持續(xù)增長(zhǎng),這會(huì)嚴(yán)重消耗 Redis 的內(nèi)存資源,甚至?xí)?dǎo)致實(shí)例內(nèi)存超過(guò) maxmemory,引發(fā)數(shù)據(jù)淘汰,這種情況你需要格外注意。

111bbc7c-7f1d-11ed-8abf-dac502259ad0.jpg

所以你在執(zhí)行 MONITOR 命令時(shí),一定要謹(jǐn)慎,盡量少用。

4) 從庫(kù)必須設(shè)置為 slave-read-only

你的從庫(kù)必須設(shè)置為 slave-read-only 狀態(tài),避免從庫(kù)寫(xiě)入數(shù)據(jù),導(dǎo)致主從數(shù)據(jù)不一致。

除此之外,從庫(kù)如果是非 read-only 狀態(tài),如果你使用的是 4.0 以下的 Redis,它存在這樣的 Bug:

從庫(kù)寫(xiě)入了有過(guò)期時(shí)間的數(shù)據(jù),不會(huì)做定時(shí)清理和釋放內(nèi)存。

這會(huì)造成從庫(kù)的內(nèi)存泄露!這個(gè)問(wèn)題直到 4.0 版本才修復(fù),你在配置從庫(kù)時(shí)需要格外注意。

5) 合理配置 timeout 和 tcp-keepalive 參數(shù)

如果因?yàn)榫W(wǎng)絡(luò)原因,導(dǎo)致你的大量客戶(hù)端連接與 Redis 意外中斷,恰好你的 Redis 配置的 maxclients 參數(shù)比較小,此時(shí)有可能導(dǎo)致客戶(hù)端無(wú)法與服務(wù)端建立新的連接(服務(wù)端認(rèn)為超過(guò)了 maxclients)。

造成這個(gè)問(wèn)題原因在于,客戶(hù)端與服務(wù)端每建立一個(gè)連接,Redis 都會(huì)給這個(gè)客戶(hù)端分配了一個(gè) client fd。

當(dāng)客戶(hù)端與服務(wù)端網(wǎng)絡(luò)發(fā)生問(wèn)題時(shí),服務(wù)端并不會(huì)立即釋放這個(gè) client fd。

什么時(shí)候釋放呢?

Redis 內(nèi)部有一個(gè)定時(shí)任務(wù),會(huì)定時(shí)檢測(cè)所有 client 的空閑時(shí)間是否超過(guò)配置的 timeout 值。

如果 Redis 沒(méi)有開(kāi)啟 tcp-keepalive 的話(huà),服務(wù)端直到配置的 timeout 時(shí)間后,才會(huì)清理釋放這個(gè) client fd。

在沒(méi)有清理之前,如果還有大量新連接進(jìn)來(lái),就有可能導(dǎo)致 Redis 服務(wù)端內(nèi)部持有的 client fd 超過(guò)了 maxclients,這時(shí)新連接就會(huì)被拒絕。

針對(duì)這種情況,我給你的優(yōu)化建議是:

  1. 不要配置過(guò)高的 timeout:讓服務(wù)端盡快把無(wú)效的 client fd 清理掉
  2. Redis 開(kāi)啟 tcp-keepalive:這樣服務(wù)端會(huì)定時(shí)給客戶(hù)端發(fā)送 TCP 心跳包,檢測(cè)連接連通性,當(dāng)網(wǎng)絡(luò)異常時(shí),可以盡快清理僵尸 client fd

6) 調(diào)整 maxmemory 時(shí),注意主從庫(kù)的調(diào)整順序

Redis 5.0 以下版本存在這樣一個(gè)問(wèn)題:從庫(kù)內(nèi)存如果超過(guò)了 maxmemory,也會(huì)觸發(fā)數(shù)據(jù)淘汰。

在某些場(chǎng)景下,從庫(kù)是可能優(yōu)先主庫(kù)達(dá)到 maxmemory 的(例如在從庫(kù)執(zhí)行 MONITOR 命令,輸出緩沖區(qū)占用大量?jī)?nèi)存),那么此時(shí)從庫(kù)開(kāi)始淘汰數(shù)據(jù),主從庫(kù)就會(huì)產(chǎn)生不一致。

要想避免此問(wèn)題,在調(diào)整 maxmemory 時(shí),一定要注意主從庫(kù)的修改順序:

  • 調(diào)大 maxmemory:先修改從庫(kù),再修改主庫(kù)
  • 調(diào)小 maxmemory:先修改主庫(kù),再修改從庫(kù)

直到 Redis 5.0,Redis 才增加了一個(gè)配置 replica-ignore-maxmemory,默認(rèn)從庫(kù)超過(guò) maxmemory 不會(huì)淘汰數(shù)據(jù),才解決了此問(wèn)題。

好了,以上這些就是「日常運(yùn)維」Redis 需要注意的,你可以對(duì)各個(gè)配置項(xiàng)查漏補(bǔ)缺,看有哪些是需要優(yōu)化的。

接下來(lái),我們來(lái)看一下,保障 Redis「安全」都需要注意哪些問(wèn)題。

Redis 安全如何保證?

無(wú)論如何,在互聯(lián)網(wǎng)時(shí)代,安全問(wèn)題一定是我們需要隨時(shí)警戒的。

你可能聽(tīng)說(shuō)過(guò) Redis 被注入可執(zhí)行腳本,然后拿到機(jī)器 root 權(quán)限的安全問(wèn)題,都是因?yàn)樵诓渴?Redis 時(shí),沒(méi)有把安全風(fēng)險(xiǎn)注意起來(lái)。

針對(duì)這方面,我給你的建議是:

  1. 不要把 Redis 部署在公網(wǎng)可訪(fǎng)問(wèn)的服務(wù)器上
  2. 部署時(shí)不使用默認(rèn)端口 6379
  3. 以普通用戶(hù)啟動(dòng) Redis 進(jìn)程,禁止 root 用戶(hù)啟動(dòng)
  4. 限制 Redis 配置文件的目錄訪(fǎng)問(wèn)權(quán)限
  5. 推薦開(kāi)啟密碼認(rèn)證
  6. 禁用/重命名危險(xiǎn)命令(KEYS/FLUSHALL/FLUSHDB/CONFIG/EVAL)

只要你把這些做到位,基本上就可以保證 Redis 的安全風(fēng)險(xiǎn)在可控范圍內(nèi)。

至此,我們分析了 Redis 在內(nèi)存、性能、可靠性、日常運(yùn)維方面的最佳實(shí)踐優(yōu)化。

除了以上這些,你還需要做到提前「預(yù)防」。

如何預(yù)防 Redis 問(wèn)題?

要想提前預(yù)防 Redis 問(wèn)題,你需要做好以下兩個(gè)方面:

  1. 合理的資源規(guī)劃
  2. 完善的監(jiān)控預(yù)警

先來(lái)說(shuō)資源規(guī)劃。

在部署 Redis 時(shí),如果你可以提前做好資源規(guī)劃,可以避免很多因?yàn)橘Y源不足產(chǎn)生的問(wèn)題。這方面我給你的建議有以下 3 點(diǎn):

  1. 保證機(jī)器有足夠的 CPU、內(nèi)存、帶寬、磁盤(pán)資源
  2. 提前做好容量規(guī)劃,主庫(kù)機(jī)器預(yù)留一半內(nèi)存資源,防止主從機(jī)器網(wǎng)絡(luò)故障,引發(fā)大面積全量同步,導(dǎo)致主庫(kù)機(jī)器內(nèi)存不足的問(wèn)題
  3. 單個(gè)實(shí)例內(nèi)存建議控制在 10G 以下,大實(shí)例在主從全量同步、RDB 備份時(shí)有阻塞風(fēng)險(xiǎn)

再來(lái)看監(jiān)控如何做。

監(jiān)控預(yù)警是提高穩(wěn)定性的重要環(huán)節(jié),完善的監(jiān)控預(yù)警,可以把問(wèn)題提前暴露出來(lái),這樣我們才可以快速反應(yīng),把問(wèn)題最小化。

這方面我給你的建議是:

  1. 做好機(jī)器 CPU、內(nèi)存、帶寬、磁盤(pán)監(jiān)控,資源不足時(shí)及時(shí)報(bào)警,任意資源不足都會(huì)影響 Redis 性能
  2. 設(shè)置合理的 slowlog 閾值,并對(duì)其進(jìn)行監(jiān)控,slowlog 過(guò)多及時(shí)報(bào)警
  3. 監(jiān)控組件采集 Redis INFO 信息時(shí),采用長(zhǎng)連接,避免頻繁的短連接
  4. 做好實(shí)例運(yùn)行時(shí)監(jiān)控,重點(diǎn)關(guān)注 expired_keys、evicted_keys、latest_fork_usec 指標(biāo),這些指標(biāo)短時(shí)突增可能會(huì)有阻塞風(fēng)險(xiǎn)

總結(jié)

好了,總結(jié)一下,這篇文章我?guī)闳娣治隽?Redis 最佳實(shí)踐的優(yōu)化路徑,其中包括內(nèi)存資源、高性能、高可靠、日常運(yùn)維、資源規(guī)劃、監(jiān)控、安全 7 個(gè)維度。

這里我畫(huà)成了思維導(dǎo)圖,方便你在實(shí)踐時(shí)做參考。

112b1870-7f1d-11ed-8abf-dac502259ad0.png

我還把這些實(shí)踐優(yōu)化,按照「業(yè)務(wù)開(kāi)發(fā)」和「運(yùn)維」兩個(gè)維度,進(jìn)一步做了劃分。

并且以「強(qiáng)制」、「推薦」、「參考」3 個(gè)級(jí)別做了標(biāo)注,這樣你在實(shí)踐優(yōu)化時(shí),就會(huì)更明確哪些該做,哪些需要結(jié)合實(shí)際的業(yè)務(wù)場(chǎng)景進(jìn)一步分析。

這些級(jí)別的實(shí)施規(guī)則如下:

  • 強(qiáng)制:需嚴(yán)格遵守,否則危害極大
  • 推薦:推薦遵守,可提升性能、降低內(nèi)存、便于運(yùn)維
  • 參考:根據(jù)業(yè)務(wù)特點(diǎn)參考實(shí)施

如果你是業(yè)務(wù)開(kāi)發(fā)人員,你需要了解 Redis 的運(yùn)行機(jī)制,例如各個(gè)命令的執(zhí)行時(shí)間復(fù)雜度、數(shù)據(jù)過(guò)期策略、數(shù)據(jù)淘汰策略等,使用合理的命令,并結(jié)合業(yè)務(wù)場(chǎng)景進(jìn)行優(yōu)化。

113f8b7a-7f1d-11ed-8abf-dac502259ad0.png

如果你是 DBA 運(yùn)維人員,你需要在資源規(guī)劃、運(yùn)維、監(jiān)控、安全層面做到位,做到未雨綢繆。

115422c4-7f1d-11ed-8abf-dac502259ad0.png

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 磁盤(pán)
    +關(guān)注

    關(guān)注

    1

    文章

    379

    瀏覽量

    25209
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40133
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    376

    瀏覽量

    10878

原文標(biāo)題:Redis中一個(gè)你絕對(duì)沒(méi)用過(guò),但是特別好用性能炸裂的數(shù)據(jù)結(jié)構(gòu),分享!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    華為云Flexus X實(shí)例,Redis性能加速評(píng)測(cè)及對(duì)比

    隨著云計(jì)算技術(shù)的飛速發(fā)展,Redis 作為一種高性能的內(nèi)存數(shù)據(jù)庫(kù),在各種應(yīng)用場(chǎng)景中發(fā)揮著越來(lái)越重要的作用。為了滿(mǎn)足不同用戶(hù)對(duì) Redis 性能的高要求,華為云推出了 Flexus X 實(shí)例,并提供了
    的頭像 發(fā)表于 12-29 15:47 ?77次閱讀
    華為云Flexus X實(shí)例,<b class='flag-5'>Redis</b>性能加速評(píng)測(cè)及對(duì)比

    華為云 Flexus X 輕松實(shí)現(xiàn) Redis 一主多從高效部署

    ,F(xiàn)lexus?X 預(yù)裝 Redis 加速鏡像,簡(jiǎn)化了 Redis 的安裝和配置流程,降低了技術(shù)門(mén)檻,使開(kāi)發(fā)者能夠專(zhuān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。 ????????本文將詳細(xì)介紹如何在華為云 Flexus?X 上
    的頭像 發(fā)表于 12-27 13:45 ?153次閱讀
    華為云 Flexus X 輕松實(shí)現(xiàn) <b class='flag-5'>Redis</b> 一主多從高效部署

    Redis使用重要的兩個(gè)機(jī)制:Reids持久化和主從復(fù)制

    今天這篇文章,我們一起了解 Redis 使用中非常重要的兩個(gè)機(jī)制:Reids 持久化和主從復(fù)制。 我們都知道Redis是一個(gè)內(nèi)存數(shù)據(jù)庫(kù),在學(xué)習(xí)主從同步之前,我們首先要想到 Redis
    的頭像 發(fā)表于 12-18 10:33 ?112次閱讀
    <b class='flag-5'>Redis</b>使用重要的兩個(gè)機(jī)制:Reids持久化和主從復(fù)制

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),它們主要用于提高應(yīng)用程序的性能,通過(guò)減少對(duì)數(shù)據(jù)庫(kù)的直接訪(fǎng)問(wèn)來(lái)加速數(shù)據(jù)檢索。以下是對(duì)Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發(fā)表于 12-18 09:33 ?150次閱讀

    恒訊科技分析:云數(shù)據(jù)庫(kù)rds和redis區(qū)別是什么如何選擇?

    結(jié)構(gòu)化數(shù)據(jù),使用SQL作為查詢(xún)語(yǔ)言,支持ACID事務(wù)和多種復(fù)雜查詢(xún)操作。而Redis是一個(gè)基于內(nèi)存的非關(guān)系型數(shù)據(jù)庫(kù),采用鍵值對(duì)模型存儲(chǔ)數(shù)據(jù),支持豐富的數(shù)據(jù)結(jié)構(gòu)如字符串、列表、集合、哈希表等。 2、性能:Redis以其超快的速度而
    的頭像 發(fā)表于 08-19 15:31 ?399次閱讀

    如何使用httpclient.c中的ESP8266和http_post將文件上傳到服務(wù)器?

    我想使用 httpclient.c 中的ESP8266和http_post將文件上傳到服務(wù)器。 為了節(jié)省內(nèi)存,文件(約 200KB)將存儲(chǔ)在 SPI 閃存中。您能告訴我如何在不將文件復(fù)制到 RAM 等的情況下發(fā)送文件嗎?
    發(fā)表于 07-12 09:47

    Redis 開(kāi)源協(xié)議調(diào)整,我們?cè)趺崔k?

    2 024 年 3 月 20 日, Redis 官方宣布,從 Redis 7.4 版本開(kāi)始,Redis 將獲得源可用許可證 ( RSALv2 ) 和服務(wù)器端公共許可證 ( SSPLv1 ) 的雙重
    的頭像 發(fā)表于 05-09 22:59 ?436次閱讀
    <b class='flag-5'>Redis</b> 開(kāi)源協(xié)議調(diào)整,我們?cè)趺崔k?

    Redis為什么這么快?

    Redis 是基于內(nèi)存的數(shù)據(jù)庫(kù),那不可避免的就要與磁盤(pán)數(shù)據(jù)庫(kù)做對(duì)比。對(duì)于磁盤(pán)數(shù)據(jù)庫(kù)來(lái)說(shuō),是需要將數(shù)據(jù)讀取到內(nèi)存里的,這個(gè)過(guò)程會(huì)受到磁盤(pán) I/O 的限制。而對(duì)于內(nèi)存數(shù)據(jù)庫(kù)來(lái)說(shuō),本身數(shù)據(jù)就
    發(fā)表于 04-12 10:32 ?216次閱讀
    <b class='flag-5'>Redis</b>為什么這么快?

    Redis開(kāi)源版與Redis企業(yè)版,怎么選用?

    點(diǎn)擊“藍(lán)字”關(guān)注我們數(shù)以千計(jì)的企業(yè)和數(shù)以百萬(wàn)計(jì)的開(kāi)發(fā)人員Redis開(kāi)源版來(lái)構(gòu)建應(yīng)用程序。但隨著用戶(hù)數(shù)量、數(shù)據(jù)量和地區(qū)性的增加,成本、可擴(kuò)展性、運(yùn)營(yíng)和可用性等問(wèn)題也隨之而來(lái)。Redis企業(yè)版
    的頭像 發(fā)表于 04-04 08:04 ?1073次閱讀
    <b class='flag-5'>Redis</b>開(kāi)源版與<b class='flag-5'>Redis</b>企業(yè)版,怎么選用?

    GaussDB(for Redis) 特性揭秘:多租戶(hù)管理

    華為云 GaussDB(for Redis)持續(xù)完善企業(yè)級(jí)增強(qiáng)特性,是名副其實(shí)的 "Redis Plus" ,其中很經(jīng)典的企業(yè)級(jí)特性是 多租戶(hù)能力 ,支持添加只讀賬號(hào)、讀寫(xiě)賬號(hào),且具備強(qiáng)大的 DB
    的頭像 發(fā)表于 03-28 22:06 ?749次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:多租戶(hù)管理

    GaussDB(for Redis) 特性揭秘:大 key 治理

    ? 從 DBA 的視角看,大 Key 無(wú)疑是引起 Redis 線(xiàn)上問(wèn)題的常見(jiàn)原因。為了解決大 Key 隱患,業(yè)務(wù)首先要遵守合理的開(kāi)發(fā)規(guī)范,減少大 Key 的產(chǎn)生和訪(fǎng)問(wèn)依賴(lài)。但有時(shí)大 Key 是在程序
    的頭像 發(fā)表于 03-28 22:06 ?667次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:大 key 治理

    新版 Redis 不再“開(kāi)源”,對(duì)使用者都有哪些影響?

    2024 年 3 月 20 日,Redis Labs 宣布從 Redis 7.4 開(kāi)始,將原先比較寬松的 BSD 源碼使用協(xié)議修改為 RSAv2和 SSPLv1協(xié)議。該變化意味著 Redis
    的頭像 發(fā)表于 03-27 22:30 ?494次閱讀
    新版 <b class='flag-5'>Redis</b> 不再“開(kāi)源”,對(duì)使用者都有哪些影響?

    Redis官方搜索引擎來(lái)了,性能炸裂!

    RediSearch 是一個(gè) Redis 模塊,為 Redis 提供查詢(xún)、二級(jí)索引和全文搜索功能。
    的頭像 發(fā)表于 02-21 10:01 ?2366次閱讀
    <b class='flag-5'>Redis</b>官方搜索引擎來(lái)了,性能炸裂!

    MongoDB和Redis的技術(shù)特性

    Redis作為一個(gè)高性能的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),能夠提供快速的緩存機(jī)制,從而幫助應(yīng)用承受高并發(fā)請(qǐng)求,顯著提高系統(tǒng)響應(yīng)速度和吞吐量。這與國(guó)內(nèi)互聯(lián)網(wǎng)公司推崇的快速迭代和高用戶(hù)并發(fā)量的特點(diǎn)非常契合。
    的頭像 發(fā)表于 02-01 11:42 ?509次閱讀
    MongoDB和<b class='flag-5'>Redis</b>的技術(shù)特性

    Redis7單線(xiàn)程與多線(xiàn)程詳解

    主要是指Redis的網(wǎng)絡(luò)IO和鍵值對(duì)讀寫(xiě)是由一個(gè)線(xiàn)程來(lái)完成的。
    的頭像 發(fā)表于 01-16 17:33 ?1854次閱讀
    <b class='flag-5'>Redis</b>7單線(xiàn)程與多線(xiàn)程詳解