01 redis訂閱發布性能(Redis在企業中都做什么用,用大白話講,說明白了就行)

时间:2024-05-15 19:30:53 编辑: 来源:

《Redis設計與實現》pdf下載在線閱讀,求百度網盤云資源

《Redis設計與實現》(黃健宏)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:買粉絲s://pan..買粉絲/s/1M0lgX6oCAbCTQfyVSURJyQ 密碼:g1k5

書名:Redis設計與實現

作者:黃健宏

豆瓣評分:8.6

出版社:機械工業出版社

出版年份:2014-6

頁數:388

內容簡介:

【官方網站】

本書的官方網站 買粉絲.RedisBook.買粉絲 提供了書本試讀、相關源碼下載和勘誤回報等服務,歡迎讀者瀏覽和使用。

【編輯推薦】

系統而全面地描述了 Redis 內部運行機制

圖示豐富,描述清晰,并給出大量參考信息,是NoSQL數據庫開發人員案頭必備

包括大部分Redis單機特征,以及所有多機特性

【讀者評價】

這本書描述的知識點很豐富,覆蓋很全,里面提到特性較多,有不少我們也沒用過 :) 每個命令內部的機制的介紹很不錯,很多估計也是首次有詳細文檔介紹。

——楊衛華(@TimYang)新浪微博技術總監

近幾年Redis以其高性能、高靈活性的優點,變得越來越流行。但很多人在使用Redis時,僅僅還是停留在比較表層的功能性認識,缺乏對內部機制原理的深入理解。本書是huangz同學長期對Redis源碼的閱讀心得結晶,書中對Redis的各個方面都進行了詳細且深入的講解,將復雜的原理用最簡單的方式為大家解構和講解,強烈推薦給每一位Redis的使用者閱讀。

—— iammutex,NoSQLFan站長,樂視網技術經理

Redis 是近些年來特別火爆的 NoSQL 之一。縱觀中外各種書籍還沒有一本能對 Redis 內部進行深入剖析,《Redis 設計與實現》可謂開此先河。常和作者在網上交流,知道作者為這本書付出了大量的心血。這本書行文流暢,思路清晰,詳細地介紹了 Redis 源碼的方方面面。無論是想學習 NoSQL、網絡編程的初學者,還是源碼控的進階者,本書都會有很大的幫助。

—— 阮若夷,支付寶高級專家

【內容簡介】

本書全面而完整地講解了Redis的內部機制與實現方式,對Redis的大多數單機功能以及所有多機功能的實現原理進行了介紹,展示了這些功能的核心數據結構以及關鍵的算法思想,圖示豐富,描述清晰,并給出大量參考信息。通過閱讀本書,讀者可以快速、有效地了解Redis的內部構造以及運作機制,更好、更高效地使用Redis。

本書主要分為四大部分。第一部分“數據結構與對象”介紹了Redis中的各種對象及其數據結構,并說明這些數據結構如何影響對象的功能和性能。第二部分“單機數據庫的實現”對Redis實現單機數據庫的方法進行了介紹,包括數據庫、RDB持久化、AOF持久化、事件等。第三部分“多機數據庫的實現”對Redis的Sentinel、復制、集群三個多機功能進行了介紹。第四部分“獨立功能的實現”對Redis中各個相對獨立的功能模塊進行了介紹,涉及發布與訂閱、事務、Lua腳本、排序、二進制位數組、慢查詢日志、監視器等。本書作者專門維護了買粉絲.redisbook.買粉絲網站,提供帶有詳細注釋的Redis源代碼,以及本書相關的更新內容。

作者簡介:

黃健宏 軟件開發者,他喜歡函數式編程,熱愛開源軟件。出于對數據庫的強烈興趣,他開始閱讀和分析 Redis 源代碼,并對 Redis 2.6 和 Redis 3.0 的源代碼進行了詳細注釋。他翻譯并維護著 Redis 中文文檔網站 買粉絲.RedisDoc .買粉絲 ,編寫 了 OORedis 庫。除此之外,他還是《Redis in Action》一書的譯者。

作者的豆瓣主頁:douban.買粉絲/people/i_m_huangz/

redis性能為什么高

(1)redis是非關系型內存數據庫數據存儲于內存中,內存讀取速度非常快,如果只是簡單的key-value,內存不是瓶頸。一般情況下,hash查找可以達到每秒數百萬次的數量級。

(2)采用單線程,避免了不必要的上下文切換和競爭條件。

(3)內部實現采用epoll,采用了epoll+自己實現的簡單的事件框架。epoll中的讀、寫、關閉、連接都轉化成了事件,然后利用epoll的多路復用特性,絕不在io上浪費一點時間。

擴展閱讀

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。

redis的官網地址,非常好記,是redis.io。(特意查了一下,域名后綴io屬于國家域名,是british Indian Ocean territory,即英屬印度洋領地)。

目前,Vmware在資助著redis項目的開發和維護。

Redis在企業中都做什么用,用大白話講,說明白了就行

Redis是由意大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存數據庫。Redis全稱為:Remote Dictionary Server(遠程數據服務),該軟件使用C語言編寫,Redis是一個key-value存儲系統,它支持豐富的數據類型,如:string、list、set、zset(sorted set)、hash。眾多語言都支持Redis,因為Redis交換數據快,所以在服務器中常用來存儲一些需要頻繁調取的數據,這樣可以大大節省系統直接讀取磁盤來獲得數據的I/O開銷,更重要的是可以極大提升速度

拿大型網站來舉個例子,比如a網站首頁一天有100萬人訪問,其中有一個板塊為推薦新聞。要是直接從數據庫查詢,那么一天就要多消耗100萬次數據庫請求。上面已經說過,Redis支持豐富的數據類型,所以這完全可以用Redis來完成,將這種熱點數據存到Redis(內存)中,要用的時候,直接從內存取,極大的提高了速度和節約了服務器的開銷。

redis主要解決了什么問題

Redis 常見的性能問題和解決方法

1.Master寫內存快照

save命令調度rdbSave函數,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所以Master最好不要寫內存快照。

2.Master AOF持久化

如果不重寫AOF文件,這個持久化方式對性能的影響是最小的,但是AOF文件會不斷增大,AOF文件過大會影響Master重啟的恢復速度。

3.Master調用BGREWRITEAOF

Master調用BGREWRITEAOF重寫AOF文件,AOF在重寫的時候會占大量的CPU和內存資源,導致服務load過高,出現短暫服務暫停現象。

下面是我的一個實際項目的情況,大概情況是這樣的:一個Master,4個Slave,沒有Sharding機制,僅是讀寫分離,Master負責寫入操作和AOF日志備份,AOF文件大概5G,Slave負責讀操作,當Master調用BGREWRITEAOF時,Master和Slave負載會突然陡增,Master的寫入請求基本上都不響應了,持續了大概5分鐘,Slave的讀請求過也半無法及時響應,Master和Slave的服務器負載圖如下:

Master Server load:

Slave server load:

上面的情況本來不會也不應該發生的,是因為以前Master的這個機器是Slave,在上面有一個shell定時任務在每天的上午10點調用BGREWRITEAOF重寫AOF文件,后來由于Master機器down了,就把備份的這個Slave切成Master了,但是這個定時任務忘記刪除了,就導致了上面悲劇情況的發生,原因還是找了幾天才找到的。

將no-appendfsync-on-rewrite的配置設為yes可以緩解這個問題,設置為yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成后再寫入。最好是不開啟Master的AOF備份功能。

4.Redis主從復制的性能問題

第一次Slave向Master同步的實現是:Slave向Master發出同步請求,Master先mp出rdb文件,然后將rdb文件全量傳輸給slave,然后Master把緩存的命令轉發給Slave,初次同步完成。第二次以及以后的同步實現是:Master將變量的快照直接實時依次發送給各個Slave。不管什么原因導致Slave和Master斷開重連都會重復以上過程。Redis的主從復制是建立在內存快照的持久化基礎上,只要有Slave就一定會有內存快照發生。雖然Redis宣稱主從復制無阻塞,但由于Redis使用單線程服務,如果Master快照文件比較大,那么第一次全量傳輸會耗費比較長時間,且文件傳輸過程中Master可能無法提供服務,也就是說服務會中斷,對于關鍵服務,這個后果也是很可怕的。

以上1.2.3.4根本問題的原因都離不開系統io瓶頸問題,也就是硬盤讀寫速度不夠快,主進程 fsync()/write() 操作被阻塞。

5.單點故障問題

由于目前Redis的主從復制還不夠成熟,所以存在明顯的單點故障問題,這個目前只能自己做方案解決,如:主動復制,Proxy實現Slave對Master的替換等,這個也是Redis作者目前比較優先的任務之一,作者的解決方案思路簡單優雅,詳情可見 Redis Sentinel design draft 

總結

Master最好不要做任何持久化工作,包括內存快照和AOF日志文件,特別是不要啟用內存快照做持久化。

如果數據比較關鍵,某個Slave開啟AOF備份數據,策略為每秒同步一次。

為了主從復制的速度和連接的穩定性,Slave和Master最好在同一個局域網內。

盡量避免在壓力較大的主

搜索关键词: