這篇文章主要講解了“數據緩存除了Redis還有什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“數據緩存除了Redis還有什么”吧!
相信國內包括我,2012,2014年之后入行的人,使用Memcached的機會很少,90%都世界使用的redis,甚至昨天晚上我和同行去聊說memcached你們有項目用到沒,大家的回答都是,這都是老課本上的內容,基本上沒項目在用,用的話也是很老的項目了。但好在我第一個接手的項目緩存就是Memcached ,以及后臺框架還是 ssh 記得 hibernate 自己封裝的sql寫法當時用的那么溜,但現在全部被mybatis干掉了,你能說什么?技術在發展,作為職業的我們就得觀察動態,學習最新的技術,但萬變不離其宗。
就跟很多同學問我,現在前端大把的vue 和 React 我學校還教jquery有用么?我只能說你學習的是編程思想,剩下的都是框架的使用,了解了框架的處理機制,你的轉變能不香么?
與memcached相比,Redis功能更強大,更受歡迎并且得到更好的支持。Memcached只能做Redis可以做的一小部分。即使Redis的功能重疊,Redis也更好。
這也是大家為什么都使用Redis的原因
兩種工具都是功能強大,快速的內存中數據存儲,可用作緩存。兩者都可以通過緩存數據庫結果,HTML片段或其他可能產生成本很高的內容來幫助加快應用程序的速度。
當用于同一事物時,以下是它們如何使用原始問題的“要考慮的要點”進行比較:
讀/寫速度:兩者都非????;鶞蕼y試因工作負載,版本和許多其他因素而異,但通常顯示redis與memcached一樣快或幾乎一樣快。我建議使用redis,但不是因為memcached速度慢。不是。
內存使用情況
:Redis更好。
memcached:您指定高速緩存大小,并且在插入項目時,守護程序會迅速增長到略大于該大小。除了重新啟動memcached之外,從來沒有真正的方法可以回收任何空間。您所有的密鑰都可能過期,您可以刷新數據庫,并且它仍將使用您為其配置的RAM的全部塊。
redis:設置最大大小由您決定。Redis永遠不會使用過多的內存,并且會為您提供不再使用的內存。
我將100,000個?2KB字符串(?200MB)的隨機句子存儲到了兩者中。Memcached RAM使用量增加到約225MB。Redis RAM使用量增加到?228MB。刷新兩次后,redis下降至?29MB,memcached保持在?225MB。它們在存儲數據方面同樣有效,但是只有一個能夠回收數據。
磁盤I / O轉儲:由于Redis在默認情況下會這樣做,并且具有非??膳渲玫某志眯?,因此無疑是redis的勝利。沒有第3方工具,Memcached無法將其轉儲到磁盤的機制。
可擴展性:在需要多個實例作為緩存之前,兩者都為您提供了大量的凈空。Redis包含的工具可幫助您超越此范圍,而memcached則不會。
Memcached是一個簡單的易失性緩存服務器。它允許您存儲鍵/值對,其中值限制為最大1MB的字符串。
擅長此事,但僅此而已。您可以通過它們的鍵以極高的速度訪問這些值,這通常會使可用網絡或什至是內存帶寬飽和。
重新啟動內存緩存后,您的數據不見了。這對于緩存很好。您不應該在其中存儲任何重要內容。
如果您需要高性能或高可用性,則可以使用第三方工具,產品和服務。
Redis可以完成與memcached相同的工作,并且可以做得更好。
Redis也可以充當緩存。它也可以存儲鍵/值對。在redis中,它們甚至可以達到512MB。
您可以關閉持久性,并且在重新啟動時也很可能會丟失數據。如果您希望緩存能夠繼續運行,那么重新啟動也可以。實際上,這是默認設置。
它也非???,通常受網絡或內存帶寬的限制。
如果一個redis / memcached實例的性能不足以滿足您的工作負載,那么redis是不二之選。Redis包括集群支持,并附帶了“在盒子里”的高可用性工具(redis-sentinel)。在過去的幾年中,redis也已成為第三方工具的明確領導者。Redis Labs,Amazon等公司提供許多有用的Redis工具和服務。Redis周圍的生態系統要大得多?,F在,大規模部署的數量可能會大于內存緩存的數量。
Redis不僅僅是一個緩存。它是內存中的數據結構服務器。在下面,您將快速概覽Redis可以做的事情,而不僅僅是像memcached這樣的簡單鍵/值緩存。Redis的大多數功能都是memcached無法做到的。
Redis的文檔比memcached的文檔更好。盡管這可能是主觀的,但它似乎一直在越來越真實。
redis.io是一個很棒的易于導航的資源。它使您可以在瀏覽器中嘗試Redis,甚至還可以通過文檔中的每個命令為您提供實時的交互式示例。
現在,redis的堆棧溢出結果是內存緩存的2倍。Google搜尋結果的2倍。提供更多語言的更易于訪問的示例。更積極的發展。更積極的客戶開發。這些度量可能并沒有太大的意義,但結合起來可以清楚地看到,有關Redis的支持和文檔越來越多,而且是最新的。
默認情況下,redis使用稱為快照的機制將數據持久保存到磁盤。如果您有足夠的可用RAM,則可以將所有數據寫入磁盤,而性能幾乎不會降低。它幾乎是免費的!
在快照模式下,突然崩潰可能會導致少量數據丟失。如果您絕對需要確保沒有數據丟失,請放心,redis也可以使用AOF(僅附加文件)模式在后臺工作。在這種持久模式下,數據可以在寫入時同步到磁盤。這樣可以將最大寫入吞吐量降低到磁盤可以寫入的速度,但是仍然應該非???。
如果需要,有許多配置選項可以微調持久性,但是默認設置非常明智。這些選項使將Redis設置為安全,冗余的存儲數據位置變得容易。這是一個真實的數據庫。
Memcached僅限于字符串,但是Redis是一個數據結構服務器,可以提供許多不同的數據類型。它還提供了充分利用這些數據類型所需的命令。
簡單文本或二進制值,最大可為512MB。這是唯一的數據類型redis和memcached共享,盡管memcached字符串限制為1MB。
Redis通過提供用于按位操作,位級別操作,浮點增量/減量支持,范圍查詢和多鍵操作的命令,為您提供了更多利用此數據類型的工具。Memcached不支持任何一種。
字符串對于各種用例都是有用的,這就是為什么memcached僅對這種數據類型有用的原因。
哈希有點像鍵值存儲中的鍵值存儲。它們在字符串字段和字符串值之間映射。使用散列的Field-> value映射比使用常規字符串的key-> value映射具有更高的空間效率。
散列可用作名稱空間,或者在您要邏輯上對許多鍵進行分組時很有用。使用散列,您可以有效地捕獲所有成員,一起使所有成員過期,一起刪除所有成員,等等。對于需要將多個鍵/值對進行分組的用例而言,它非常有用。
哈希的一種示例用法是在應用程序之間存儲用戶配置文件。使用用戶ID作為鍵存儲的Redis哈希將允許您根據需要存儲有關用戶的數據,同時將其存儲在單個鍵下。使用散列而不是將配置文件序列化為字符串的優點是,您可以讓不同的應用程序在用戶配置文件中讀/寫不同的字段,而不必擔心一個應用程序覆蓋其他應用程序所做的更改(如果您將陳舊的序列化,則可能會發生這種情況)數據)。
Redis列表是字符串的有序集合。它們經過優化,可從列表的頂部或底部(又名:左側或右側)插入,讀取或刪除值。
Redis的提供許多命令為利用列表,包括命令到壓入/彈出的項目,推/列表,截斷列表之間彈出,執行范圍查詢等
列表使持久的,原子的隊列成為可能。這些非常適合作業隊列,日志,緩沖區和許多其他用例。
集是唯一值的無序集合。它們經過了優化,可讓您快速檢查值是否在集合中,快速添加/刪除值以及測量與其他集合的重疊。
這些功能非常適合訪問控制列表,唯一的訪問者跟蹤器以及許多其他功能。大多數編程語言都有類似的東西(通常稱為Set)。就是這樣,只有分布式的。
Redis提供了一些命令來管理集合。存在諸如添加,刪除和檢查集合之類的顯而易見的內容。因此,不太明顯的命令(例如彈出/讀取隨機項)以及用于執行與其他集合的并集和交集的命令。
排序集也是唯一值的集合。顧名思義,這些是有序的。它們按分數排序,然后按字典順序排序。
此數據類型已針對按分數快速查找進行了優化。獲得最高,最低或介于兩者之間的任何值都非???。
如果將用戶以及他們的高分添加到排序的集合中,則您將擁有完美的排行榜。隨著新的高分出現,只需將他們的高分再次添加到集合中,它將重新排列排行榜。也非常適合跟蹤用戶上次訪問的時間以及誰在您的應用程序中處于活動狀態。
存儲具有相同分數的值會使它們按字典順序(按字母順序考慮)排序。這對于自動完成功能等很有用。
許多排序的set命令類似于set命令,有時帶有附加的score參數。還包括用于管理分數和按分數查詢的命令。
Redis的具有幾個命令用于存儲,檢索,以及測量的地理數據。這包括半徑查詢和測量點之間的距離。
從技術上講,Redis中的地理數據存儲在已排序的集合中,因此這并不是真正的獨立數據類型。它更多地是對排序集的擴展。
像geo一樣,這些也不是完全獨立的數據類型。這些命令使您可以將字符串數據視為位圖或超級日志。
位圖是我在Strings
下面引用的位級運算符的作用。這種數據類型是reddit最近的合作藝術項目r / Place的基本構建塊。
HyperLogLog允許您使用恒定的極少量空間以驚人的精度計算幾乎無限的唯一值。僅使用?16KB,您就可以有效地計算出網站唯一身份訪問者的數量,即使該數量是數百萬。
Redis中的命令是原子性的,這意味著您可以確保在向Redis寫入值后,該值對于連接到Redis的所有客戶端都是可見的。無需等待該值傳播。從技術上講,memcached也是原子的,但是redis在memcached之外添加了所有這些功能,值得注意的是,所有這些其他數據類型和功能也是原子的。
盡管與關系數據庫中的事務不太相同,redis也具有使用“樂觀鎖定”(WATCH / MULTI / EXEC)的事務。
Redis提供了一個稱為“流水線”的功能。如果要執行許多redis命令,可以使用流水線將它們一次發送一次,而不是一次發送到redis。
通常,當您執行命令以進行redis或memcached時,每個命令都是一個單獨的請求/響應周期。使用流水線,redis可以緩沖多個命令并一次執行所有命令,并在一次回復中對所有命令的所有響應進行響應。
這可以使您在批量導入或涉及許多命令的其他操作上實現更高的吞吐量。
Redis具有專用于發布/訂閱功能的命令,從而允許Redis充當高速消息廣播者。這允許單個客戶端將消息發布到連接到通道的許多其他客戶端。
Redis可以執行發布/訂閱以及幾乎所有工具。像RabbitMQ這樣的專用消息代理可能在某些方面具有優勢,但事實上,同一臺服務器還可以為您提供持久的持久隊列和您的發布/訂閱工作負載可能需要的其他數據結構,因此Redis通常被證明是最好,最簡單的工具為了工作。
您可以想到lua腳本,例如redis自己的SQL或存儲過程。它的大小不一,但這個類比大都可行。
也許您要執行Redis復雜的計算。也許您負擔不起交易回滾,并且需要保證復雜過程的每一步都將自動發生。這些問題以及更多問題可以通過lua腳本解決。
整個腳本是原子執行的,因此,如果您可以使邏輯適合lua腳本,則通??梢员苊馀獊y樂觀的鎖定事務。
如上所述,redis包括對集群的內置支持,并與自己的稱為的高可用性工具捆綁在一起redis-sentinel
。
毫不猶豫地,對于任何新項目或尚未使用memcached的現有項目,我建議在memcached上使用redis。
以上可能聽起來像我不喜歡memcached。相反:它是一種功能強大,簡單,穩定,成熟且經過強化的工具。甚至在某些用例中,它比redis快一點。我喜歡記憶快取。我只是認為這對未來的發展沒有多大意義。
Redis可以做memcached所做的一切,通常更好。memcached的任何性能優勢都是次要的且特定于工作負載。還有一些工作負載,redis會更快,redis可以做更多的工作,而memcached根本做不到。面對巨大的功能鴻溝,微小的性能差異似乎微不足道,而且兩個工具是如此之快和高效,它們很可能是您不得不擔心擴展的基礎架構的最后一部分。
只有一種情況使memcached更有意義:將memcached用作緩存。如果您已經使用memcached進行緩存,那么在滿足您需要的情況下,請繼續使用它。遷移到Redis可能不值得,如果您僅將Redis用于緩存,則可能無法提供足夠的好處,值得您花時間。如果memcached不能滿足您的需求,那么您可能應該改用Redis。無論您需要擴展到內存緩存之外還是需要其他功能,這都是事實。
感謝各位的閱讀,以上就是“數據緩存除了Redis還有什么”的內容了,經過本文的學習后,相信大家對數據緩存除了Redis還有什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。