溫馨提示×

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

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

數(shù)據(jù)緩存除了Redis還有什么

發(fā)布時(shí)間:2021-06-26 14:35:42 來(lái)源:億速云 閱讀:1761 作者:chen 欄目:編程語(yǔ)言

這篇文章主要講解了“數(shù)據(jù)緩存除了Redis還有什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“數(shù)據(jù)緩存除了Redis還有什么”吧!

很多同學(xué)甚至沒(méi)聽(tīng)過(guò)Memcached

相信國(guó)內(nèi)包括我,2012,2014年之后入行的人,使用Memcached的機(jī)會(huì)很少,90%都世界使用的redis,甚至昨天晚上我和同行去聊說(shuō)memcached你們有項(xiàng)目用到?jīng)],大家的回答都是,這都是老課本上的內(nèi)容,基本上沒(méi)項(xiàng)目在用,用的話(huà)也是很老的項(xiàng)目了。但好在我第一個(gè)接手的項(xiàng)目緩存就是Memcached ,以及后臺(tái)框架還是 ssh 記得 hibernate 自己封裝的sql寫(xiě)法當(dāng)時(shí)用的那么溜,但現(xiàn)在全部被mybatis干掉了,你能說(shuō)什么?技術(shù)在發(fā)展,作為職業(yè)的我們就得觀察動(dòng)態(tài),學(xué)習(xí)最新的技術(shù),但萬(wàn)變不離其宗。

就跟很多同學(xué)問(wèn)我,現(xiàn)在前端大把的vue 和 React 我學(xué)校還教jquery有用么?我只能說(shuō)你學(xué)習(xí)的是編程思想,剩下的都是框架的使用,了解了框架的處理機(jī)制,你的轉(zhuǎn)變能不香么?

什么是Memcached

數(shù)據(jù)緩存除了Redis還有什么

什么是Redis

數(shù)據(jù)緩存除了Redis還有什么

與memcached相比,Redis功能更強(qiáng)大,更受歡迎并且得到更好的支持。Memcached只能做Redis可以做的一小部分。即使Redis的功能重疊,Redis也更好。

這也是大家為什么都使用Redis的原因

Memcached與Redis:直接比較

兩種工具都是功能強(qiáng)大,快速的內(nèi)存中數(shù)據(jù)存儲(chǔ),可用作緩存。兩者都可以通過(guò)緩存數(shù)據(jù)庫(kù)結(jié)果,HTML片段或其他可能產(chǎn)生成本很高的內(nèi)容來(lái)幫助加快應(yīng)用程序的速度。

對(duì)比要點(diǎn)

當(dāng)用于同一事物時(shí),以下是它們?nèi)绾问褂迷紗?wèn)題的“要考慮的要點(diǎn)”進(jìn)行比較:

  • 讀/寫(xiě)速度:兩者都非??臁;鶞?zhǔn)測(cè)試因工作負(fù)載,版本和許多其他因素而異,但通常顯示redis與memcached一樣快或幾乎一樣快。我建議使用redis,但不是因?yàn)閙emcached速度慢。不是。

  • 內(nèi)存使用情況

    :Redis更好。

    • memcached:您指定高速緩存大小,并且在插入項(xiàng)目時(shí),守護(hù)程序會(huì)迅速增長(zhǎng)到略大于該大小。除了重新啟動(dòng)memcached之外,從來(lái)沒(méi)有真正的方法可以回收任何空間。您所有的密鑰都可能過(guò)期,您可以刷新數(shù)據(jù)庫(kù),并且它仍將使用您為其配置的RAM的全部塊。

    • redis:設(shè)置最大大小由您決定。Redis永遠(yuǎn)不會(huì)使用過(guò)多的內(nèi)存,并且會(huì)為您提供不再使用的內(nèi)存。

    • 我將100,000個(gè)?2KB字符串(?200MB)的隨機(jī)句子存儲(chǔ)到了兩者中。Memcached RAM使用量增加到約225MB。Redis RAM使用量增加到?228MB。刷新兩次后,redis下降至?29MB,memcached保持在?225MB。它們?cè)诖鎯?chǔ)數(shù)據(jù)方面同樣有效,但是只有一個(gè)能夠回收數(shù)據(jù)。

  • 磁盤(pán)I / O轉(zhuǎn)儲(chǔ):由于Redis在默認(rèn)情況下會(huì)這樣做,并且具有非??膳渲玫某志眯?,因此無(wú)疑是redis的勝利。沒(méi)有第3方工具,Memcached無(wú)法將其轉(zhuǎn)儲(chǔ)到磁盤(pán)的機(jī)制。

  • 可擴(kuò)展性:在需要多個(gè)實(shí)例作為緩存之前,兩者都為您提供了大量的凈空。Redis包含的工具可幫助您超越此范圍,而memcached則不會(huì)。

緩存讀取速度

Memcached是一個(gè)簡(jiǎn)單的易失性緩存服務(wù)器。它允許您存儲(chǔ)鍵/值對(duì),其中值限制為最大1MB的字符串。

擅長(zhǎng)此事,但僅此而已。您可以通過(guò)它們的鍵以極高的速度訪問(wèn)這些值,這通常會(huì)使可用網(wǎng)絡(luò)或什至是內(nèi)存帶寬飽和。

重新啟動(dòng)內(nèi)存緩存后,您的數(shù)據(jù)不見(jiàn)了。這對(duì)于緩存很好。您不應(yīng)該在其中存儲(chǔ)任何重要內(nèi)容。

如果您需要高性能或高可用性,則可以使用第三方工具,產(chǎn)品和服務(wù)。

Redis

Redis可以完成與memcached相同的工作,并且可以做得更好。

Redis也可以充當(dāng)緩存。它也可以存儲(chǔ)鍵/值對(duì)。在redis中,它們甚至可以達(dá)到512MB。

您可以關(guān)閉持久性,并且在重新啟動(dòng)時(shí)也很可能會(huì)丟失數(shù)據(jù)。如果您希望緩存能夠繼續(xù)運(yùn)行,那么重新啟動(dòng)也可以。實(shí)際上,這是默認(rèn)設(shè)置。

它也非常快,通常受網(wǎng)絡(luò)或內(nèi)存帶寬的限制。

如果一個(gè)redis / memcached實(shí)例的性能不足以滿(mǎn)足您的工作負(fù)載,那么redis是不二之選。Redis包括集群支持,并附帶了“在盒子里”的高可用性工具(redis-sentinel)。在過(guò)去的幾年中,redis也已成為第三方工具的明確領(lǐng)導(dǎo)者。Redis Labs,Amazon等公司提供許多有用的Redis工具和服務(wù)。Redis周?chē)纳鷳B(tài)系統(tǒng)要大得多?,F(xiàn)在,大規(guī)模部署的數(shù)量可能會(huì)大于內(nèi)存緩存的數(shù)量。

Redis 特點(diǎn)

Redis不僅僅是一個(gè)緩存。它是內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)服務(wù)器。在下面,您將快速概覽Redis可以做的事情,而不僅僅是像memcached這樣的簡(jiǎn)單鍵/值緩存。Redis的大多數(shù)功能都是memcached無(wú)法做到的。

文獻(xiàn)資料

Redis的文檔比memcached的文檔更好。盡管這可能是主觀的,但它似乎一直在越來(lái)越真實(shí)。

redis.io是一個(gè)很棒的易于導(dǎo)航的資源。它使您可以在瀏覽器中嘗試Redis,甚至還可以通過(guò)文檔中的每個(gè)命令為您提供實(shí)時(shí)的交互式示例。

現(xiàn)在,redis的堆棧溢出結(jié)果是內(nèi)存緩存的2倍。Google搜尋結(jié)果的2倍。提供更多語(yǔ)言的更易于訪問(wèn)的示例。更積極的發(fā)展。更積極的客戶(hù)開(kāi)發(fā)。這些度量可能并沒(méi)有太大的意義,但結(jié)合起來(lái)可以清楚地看到,有關(guān)Redis的支持和文檔越來(lái)越多,而且是最新的。

Redis 容災(zāi)機(jī)制

默認(rèn)情況下,redis使用稱(chēng)為快照的機(jī)制將數(shù)據(jù)持久保存到磁盤(pán)。如果您有足夠的可用RAM,則可以將所有數(shù)據(jù)寫(xiě)入磁盤(pán),而性能幾乎不會(huì)降低。它幾乎是免費(fèi)的!

在快照模式下,突然崩潰可能會(huì)導(dǎo)致少量數(shù)據(jù)丟失。如果您絕對(duì)需要確保沒(méi)有數(shù)據(jù)丟失,請(qǐng)放心,redis也可以使用AOF(僅附加文件)模式在后臺(tái)工作。在這種持久模式下,數(shù)據(jù)可以在寫(xiě)入時(shí)同步到磁盤(pán)。這樣可以將最大寫(xiě)入吞吐量降低到磁盤(pán)可以寫(xiě)入的速度,但是仍然應(yīng)該非常快。

如果需要,有許多配置選項(xiàng)可以微調(diào)持久性,但是默認(rèn)設(shè)置非常明智。這些選項(xiàng)使將Redis設(shè)置為安全,冗余的存儲(chǔ)數(shù)據(jù)位置變得容易。這是一個(gè)真實(shí)的數(shù)據(jù)庫(kù)。

數(shù)據(jù)類(lèi)型豐富

Memcached僅限于字符串,但是Redis是一個(gè)數(shù)據(jù)結(jié)構(gòu)服務(wù)器,可以提供許多不同的數(shù)據(jù)類(lèi)型。它還提供了充分利用這些數(shù)據(jù)類(lèi)型所需的命令。

字符串(命令)

簡(jiǎn)單文本或二進(jìn)制值,最大可為512MB。這是唯一的數(shù)據(jù)類(lèi)型redis和memcached共享,盡管memcached字符串限制為1MB。

Redis通過(guò)提供用于按位操作,位級(jí)別操作,浮點(diǎn)增量/減量支持,范圍查詢(xún)和多鍵操作的命令,為您提供了更多利用此數(shù)據(jù)類(lèi)型的工具。Memcached不支持任何一種。

字符串對(duì)于各種用例都是有用的,這就是為什么memcached僅對(duì)這種數(shù)據(jù)類(lèi)型有用的原因。

散列(命令)

哈希有點(diǎn)像鍵值存儲(chǔ)中的鍵值存儲(chǔ)。它們?cè)谧址侄魏妥址抵g映射。使用散列的Field-> value映射比使用常規(guī)字符串的key-> value映射具有更高的空間效率。

散列可用作名稱(chēng)空間,或者在您要邏輯上對(duì)許多鍵進(jìn)行分組時(shí)很有用。使用散列,您可以有效地捕獲所有成員,一起使所有成員過(guò)期,一起刪除所有成員,等等。對(duì)于需要將多個(gè)鍵/值對(duì)進(jìn)行分組的用例而言,它非常有用。

哈希的一種示例用法是在應(yīng)用程序之間存儲(chǔ)用戶(hù)配置文件。使用用戶(hù)ID作為鍵存儲(chǔ)的Redis哈希將允許您根據(jù)需要存儲(chǔ)有關(guān)用戶(hù)的數(shù)據(jù),同時(shí)將其存儲(chǔ)在單個(gè)鍵下。使用散列而不是將配置文件序列化為字符串的優(yōu)點(diǎn)是,您可以讓不同的應(yīng)用程序在用戶(hù)配置文件中讀/寫(xiě)不同的字段,而不必?fù)?dān)心一個(gè)應(yīng)用程序覆蓋其他應(yīng)用程序所做的更改(如果您將陳舊的序列化,則可能會(huì)發(fā)生這種情況)數(shù)據(jù))。

列表(命令)

Redis列表是字符串的有序集合。它們經(jīng)過(guò)優(yōu)化,可從列表的頂部或底部(又名:左側(cè)或右側(cè))插入,讀取或刪除值。

Redis的提供許多命令為利用列表,包括命令到壓入/彈出的項(xiàng)目,推/列表,截?cái)嗔斜碇g彈出,執(zhí)行范圍查詢(xún)等

列表使持久的,原子的隊(duì)列成為可能。這些非常適合作業(yè)隊(duì)列,日志,緩沖區(qū)和許多其他用例。

設(shè)置(命令)

集是唯一值的無(wú)序集合。它們經(jīng)過(guò)了優(yōu)化,可讓您快速檢查值是否在集合中,快速添加/刪除值以及測(cè)量與其他集合的重疊。

這些功能非常適合訪問(wèn)控制列表,唯一的訪問(wèn)者跟蹤器以及許多其他功能。大多數(shù)編程語(yǔ)言都有類(lèi)似的東西(通常稱(chēng)為Set)。就是這樣,只有分布式的。

Redis提供了一些命令來(lái)管理集合。存在諸如添加,刪除和檢查集合之類(lèi)的顯而易見(jiàn)的內(nèi)容。因此,不太明顯的命令(例如彈出/讀取隨機(jī)項(xiàng))以及用于執(zhí)行與其他集合的并集和交集的命令。

排序集(命令)

排序集也是唯一值的集合。顧名思義,這些是有序的。它們按分?jǐn)?shù)排序,然后按字典順序排序。

此數(shù)據(jù)類(lèi)型已針對(duì)按分?jǐn)?shù)快速查找進(jìn)行了優(yōu)化。獲得最高,最低或介于兩者之間的任何值都非??臁?/p>

如果將用戶(hù)以及他們的高分添加到排序的集合中,則您將擁有完美的排行榜。隨著新的高分出現(xiàn),只需將他們的高分再次添加到集合中,它將重新排列排行榜。也非常適合跟蹤用戶(hù)上次訪問(wèn)的時(shí)間以及誰(shuí)在您的應(yīng)用程序中處于活動(dòng)狀態(tài)。

存儲(chǔ)具有相同分?jǐn)?shù)的值會(huì)使它們按字典順序(按字母順序考慮)排序。這對(duì)于自動(dòng)完成功能等很有用。

許多排序的set命令類(lèi)似于set命令,有時(shí)帶有附加的score參數(shù)。還包括用于管理分?jǐn)?shù)和按分?jǐn)?shù)查詢(xún)的命令。

Redis 地理位置 GEO

Redis的具有幾個(gè)命令用于存儲(chǔ),檢索,以及測(cè)量的地理數(shù)據(jù)。這包括半徑查詢(xún)和測(cè)量點(diǎn)之間的距離。

從技術(shù)上講,Redis中的地理數(shù)據(jù)存儲(chǔ)在已排序的集合中,因此這并不是真正的獨(dú)立數(shù)據(jù)類(lèi)型。它更多地是對(duì)排序集的擴(kuò)展。

位圖和HyperLogLog

像geo一樣,這些也不是完全獨(dú)立的數(shù)據(jù)類(lèi)型。這些命令使您可以將字符串?dāng)?shù)據(jù)視為位圖或超級(jí)日志。

位圖是我在Strings下面引用的位級(jí)運(yùn)算符的作用。這種數(shù)據(jù)類(lèi)型是reddit最近的合作藝術(shù)項(xiàng)目r / Place的基本構(gòu)建塊。

HyperLogLog允許您使用恒定的極少量空間以驚人的精度計(jì)算幾乎無(wú)限的唯一值。僅使用?16KB,您就可以有效地計(jì)算出網(wǎng)站唯一身份訪問(wèn)者的數(shù)量,即使該數(shù)量是數(shù)百萬(wàn)。

交易和原子性

Redis中的命令是原子性的,這意味著您可以確保在向Redis寫(xiě)入值后,該值對(duì)于連接到Redis的所有客戶(hù)端都是可見(jiàn)的。無(wú)需等待該值傳播。從技術(shù)上講,memcached也是原子的,但是redis在memcached之外添加了所有這些功能,值得注意的是,所有這些其他數(shù)據(jù)類(lèi)型和功能也是原子的。

盡管與關(guān)系數(shù)據(jù)庫(kù)中的事務(wù)不太相同,redis也具有使用“樂(lè)觀鎖定”(WATCH / MULTI / EXEC)的事務(wù)。

流水線

Redis提供了一個(gè)稱(chēng)為“流水線”的功能。如果要執(zhí)行許多redis命令,可以使用流水線將它們一次發(fā)送一次,而不是一次發(fā)送到redis。

通常,當(dāng)您執(zhí)行命令以進(jìn)行redis或memcached時(shí),每個(gè)命令都是一個(gè)單獨(dú)的請(qǐng)求/響應(yīng)周期。使用流水線,redis可以緩沖多個(gè)命令并一次執(zhí)行所有命令,并在一次回復(fù)中對(duì)所有命令的所有響應(yīng)進(jìn)行響應(yīng)。

這可以使您在批量導(dǎo)入或涉及許多命令的其他操作上實(shí)現(xiàn)更高的吞吐量。

發(fā)布/訂閱

Redis具有專(zhuān)用于發(fā)布/訂閱功能的命令,從而允許Redis充當(dāng)高速消息廣播者。這允許單個(gè)客戶(hù)端將消息發(fā)布到連接到通道的許多其他客戶(hù)端。

Redis可以執(zhí)行發(fā)布/訂閱以及幾乎所有工具。像RabbitMQ這樣的專(zhuān)用消息代理可能在某些方面具有優(yōu)勢(shì),但事實(shí)上,同一臺(tái)服務(wù)器還可以為您提供持久的持久隊(duì)列和您的發(fā)布/訂閱工作負(fù)載可能需要的其他數(shù)據(jù)結(jié)構(gòu),因此Redis通常被證明是最好,最簡(jiǎn)單的工具為了工作。

Lua腳本

您可以想到lua腳本,例如redis自己的SQL或存儲(chǔ)過(guò)程。它的大小不一,但這個(gè)類(lèi)比大都可行。

也許您要執(zhí)行Redis復(fù)雜的計(jì)算。也許您負(fù)擔(dān)不起交易回滾,并且需要保證復(fù)雜過(guò)程的每一步都將自動(dòng)發(fā)生。這些問(wèn)題以及更多問(wèn)題可以通過(guò)lua腳本解決。

整個(gè)腳本是原子執(zhí)行的,因此,如果您可以使邏輯適合lua腳本,則通常可以避免弄亂樂(lè)觀的鎖定事務(wù)。

縮放比例

如上所述,redis包括對(duì)集群的內(nèi)置支持,并與自己的稱(chēng)為的高可用性工具捆綁在一起redis-sentinel

結(jié)論

毫不猶豫地,對(duì)于任何新項(xiàng)目或尚未使用memcached的現(xiàn)有項(xiàng)目,我建議在memcached上使用redis。

以上可能聽(tīng)起來(lái)像我不喜歡memcached。相反:它是一種功能強(qiáng)大,簡(jiǎn)單,穩(wěn)定,成熟且經(jīng)過(guò)強(qiáng)化的工具。甚至在某些用例中,它比redis快一點(diǎn)。我喜歡記憶快取。我只是認(rèn)為這對(duì)未來(lái)的發(fā)展沒(méi)有多大意義。

Redis可以做memcached所做的一切,通常更好。memcached的任何性能優(yōu)勢(shì)都是次要的且特定于工作負(fù)載。還有一些工作負(fù)載,redis會(huì)更快,redis可以做更多的工作,而memcached根本做不到。面對(duì)巨大的功能鴻溝,微小的性能差異似乎微不足道,而且兩個(gè)工具是如此之快和高效,它們很可能是您不得不擔(dān)心擴(kuò)展的基礎(chǔ)架構(gòu)的最后一部分。

只有一種情況使memcached更有意義:將memcached用作緩存。如果您已經(jīng)使用memcached進(jìn)行緩存,那么在滿(mǎn)足您需要的情況下,請(qǐng)繼續(xù)使用它。遷移到Redis可能不值得,如果您僅將Redis用于緩存,則可能無(wú)法提供足夠的好處,值得您花時(shí)間。如果memcached不能滿(mǎn)足您的需求,那么您可能應(yīng)該改用Redis。無(wú)論您需要擴(kuò)展到內(nèi)存緩存之外還是需要其他功能,這都是事實(shí)。

感謝各位的閱讀,以上就是“數(shù)據(jù)緩存除了Redis還有什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)數(shù)據(jù)緩存除了Redis還有什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI