溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Redis之前5個(gè)必須了解的事情有哪些

發(fā)布時(shí)間:2021-11-10 11:01:55 來源:億速云 閱讀:123 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹使用Redis之前5個(gè)必須了解的事情有哪些,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

使用Redis開發(fā)應(yīng)用程序是一個(gè)很愉快的過程,但是就像其他技術(shù)一樣,基于Redis的應(yīng)用程序設(shè)計(jì)你同樣需要牢記幾點(diǎn)。在之前,你可能已經(jīng)對關(guān)系型數(shù)據(jù)庫開發(fā)的那一整個(gè)套路了然如胸,而基于Redis的應(yīng)用程序開發(fā)也有許多相似的地方,但是你必須牢記以下兩點(diǎn)——Redis是個(gè)內(nèi)存數(shù)據(jù)庫,同時(shí)它是單線程的。因此,在使用Redis時(shí),你需要注意以下幾點(diǎn):

1. 掌控儲存在Redis中的所有鍵

數(shù)據(jù)庫的主要功能是儲存數(shù)據(jù),但是對于開發(fā)者來說,因?yàn)閼?yīng)用程序需求或者數(shù)據(jù)使用方法的改變,忽略存儲在數(shù)據(jù)庫中的某些數(shù)據(jù)是非常正常的,在Redis中同樣如此。你可能忽視期滿某些鍵,也可能因?yàn)閼?yīng)用程序的某個(gè)模塊棄用而忘掉這些數(shù)據(jù)。

無論哪種情況,Redis都存儲了一些不再使用的數(shù)據(jù),平白無故的占用了一些空間。Redis的弱結(jié)構(gòu)數(shù)據(jù)模式讓集中儲存的內(nèi)容很難被弄清,除非你為鍵使用一套非常成熟的命名法則。使用合適的命名方法會簡化你的數(shù)據(jù)庫管理,當(dāng)你通過你的應(yīng)用程序或者服務(wù)做鍵的命名空間時(shí)(通常情況下是使用冒號來劃分鍵名),你就可以在數(shù)據(jù)遷移、轉(zhuǎn)換或者刪除時(shí)輕松的識別。

Redis另一個(gè)常見用例是作為熱數(shù)據(jù)項(xiàng)作的第二數(shù)據(jù)存儲,大部分的數(shù)據(jù)被保存在其他的數(shù)據(jù)庫中,比如PostgreSQL或MongoDB。在這些用例中,當(dāng)數(shù)據(jù)從主存儲移除時(shí),開發(fā)者經(jīng)常會忘記刪除Redis中對應(yīng)的數(shù)據(jù)。這種存在跨數(shù)據(jù)存儲的情況下,通常需要做級聯(lián)刪除,這種情況下,可以通過在Redis配置保存特定數(shù)據(jù)項(xiàng)的所有識別符來實(shí)現(xiàn),從而保證數(shù)據(jù)在主數(shù)據(jù)庫被刪除后,系統(tǒng)會調(diào)用一個(gè)清理程序來刪除所有相關(guān)副本和信息。

2. 控制所有鍵名的長度

在上文我們說過要使用合適的命名規(guī)則,并且添加前綴來識別數(shù)據(jù)走向,因此這一條看起來似乎與之違背。但是,請別忘記,Redis是個(gè)內(nèi)存數(shù)據(jù)庫,鍵越短你需要的空間就越少。理所當(dāng)然,當(dāng)數(shù)據(jù)庫中擁有數(shù)百萬或者數(shù)十億鍵時(shí),鍵名的長度將影響重大。

舉個(gè)例子:在一個(gè)32位的Redis服務(wù)器上,如果儲存一百萬個(gè)鍵,每個(gè)值的長度是32-character,那么在使用6-character長度鍵名時(shí),將會消耗大約96MB的空間,但是如果使用12-character長度的鍵名時(shí),空間消耗則會提升至111MB左右。隨著鍵的增多,15%的額外開銷將產(chǎn)生重大的影響。

3. 使用合適的數(shù)據(jù)結(jié)構(gòu)

不管是內(nèi)存使用或者是性能,有的時(shí)候數(shù)據(jù)結(jié)構(gòu)將產(chǎn)生很大的影響,下面是一些可以參考的最佳實(shí)踐:

取代將數(shù)據(jù)存儲為數(shù)千(或者數(shù)百萬)獨(dú)立的字符串,可以考慮使用哈希數(shù)據(jù)結(jié)構(gòu)將相關(guān)數(shù)據(jù)進(jìn)行分組。哈希表是非常有效率的,并且可以減少你的內(nèi)存使用;同時(shí),哈希還更有益于細(xì)節(jié)抽象和代碼可讀。

合適時(shí)候,使用list代替set。如果你不需要使用set特性,List在使用更少內(nèi)存的情況下可以提供比set更快的速度。

Sorted sets是最昂貴的數(shù)據(jù)結(jié)構(gòu),不管是內(nèi)存消耗還是基本操作的復(fù)雜性。如果你只是需要一個(gè)查詢記錄的途徑,并不在意排序這樣的屬性,那么輕建議使用哈希表。

Redis中一個(gè)經(jīng)常被忽視的功能就是bitmaps或者bitsets(V2.2之后)。Bitsets允許你在Redis值上執(zhí)行多個(gè)bit-level操作,比如一些輕量級的分析。

4. 使用SCAN時(shí)別使用鍵

從Redis v2.8開始,SCAN命令已經(jīng)可用,它允許使用游標(biāo)從keyspace中檢索鍵。對比KEYS命令,雖然SCAN無法一次性返回所有匹配結(jié)果,但是卻規(guī)避了阻塞系統(tǒng)這個(gè)高風(fēng)險(xiǎn),從而也讓一些操作可以放在主節(jié)點(diǎn)上執(zhí)行。

需要注意的是,SCAN 命令是一個(gè)基于游標(biāo)的迭代器。SCAN 命令每次被調(diào)用之后, 都會向用戶返回一個(gè)新的游標(biāo),用戶在下次迭代時(shí)需要使用這個(gè)新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來延續(xù)之前的迭代過程。同時(shí),使用SCAN,用戶還可以使用keyname模式和count選項(xiàng)對命令進(jìn)行調(diào)整。

SCAN相關(guān)命令還包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分別用于集合、哈希鍵及有續(xù)集等。

5. 使用服務(wù)器端Lua腳本

在Redis使用過程中,Lua腳本的支持無疑給開發(fā)者提供一個(gè)非常友好的開發(fā)環(huán)境,從而大幅度解放用戶的創(chuàng)造力。如果使用得當(dāng),Lua腳本可以給性能和資源消耗帶來非常大的改善。取代將數(shù)據(jù)傳送給CPU,腳本允許你在最接近數(shù)據(jù)的地方執(zhí)行邏輯,從而減少網(wǎng)絡(luò)延時(shí)和數(shù)據(jù)的冗余傳輸。

在Redis中,Lua一個(gè)非常經(jīng)典的用例就是數(shù)據(jù)過濾或者將數(shù)據(jù)聚合到應(yīng)用程序。通過將處理工作流封裝到一個(gè)腳本中,你只需要調(diào)用它就可以在更短的時(shí)間內(nèi)使用很少的資源來獲取一個(gè)更小的答案。

關(guān)于使用Redis之前5個(gè)必須了解的事情有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI