Redis探險 -《Redis開發與運維》筆記,精華分享。

最近看完了《Redis開發與運維》分享給大家。

全面講解Redis基本功能及其應用,並結合線上開發與運維監控中的實際使用案例,深入分析並總結了實際開發運維中遇到的“陷阱”,以及背後的原因, 包含大規模集羣開發與管理的場景、應用案例與開發技巧,爲高效開發運維提供了大量實際經驗和建議。本書不要求讀者有任何Redis使用經驗,對入門與進階DevOps的開發者提供有價值的幫助。主要內容包括:Redis的安裝配置、API、各種高效功能、客戶端、持久化、複製、高可用、內存、哨兵、集羣、緩存設計等,Redis高可用集羣解決方案,Redis設計和使用中的問題,最後提供了一個開源工具:Redis監控運維雲平臺CacheCloud。

用心之作。唯一個人認爲可以再優化的是,監控軟件的安裝,很多配置都默認寫在一些文件,導致自定義安裝目錄時帶來部分不變,,,但是依然不能妨礙書本身的精品。大力推薦 ,不管是 redis 新手 老手,都能學到很多。

Redis相關書籍裏面內容屬於特別上乘的。書中有好多以前沒有發現和注意的細節點,而且內容的連貫性,深度等各個點都寫的非常的好,書中也會提及很多開發人員對redis認知的盲區,該書能更好的讓你做好redis相關的工作,在授之以魚之時也授之以漁。最近也作爲我強力推薦的一本redis好書在推薦給身邊的朋友看。

初識Redis

單線程面向快速執行場景的內純數據庫

特性

  1. 數據結構:string字符串(位圖bitmaps,hyperloglog),hash哈希表,list列表,set集合,zset有序集合

  2. 單線程模型

  3. 持久化方式:RDB,AOF

  4. 主從複製

5種數據類型

String

字符串類型是Redis最基礎的數據結構。首先鍵都是字符串類型的, 而且其他幾種數據結構都是在字符串的基礎上構建的。字符串類型的值實際可以是字符串(簡單的字符串、複雜的字符串(JSON/XML等))、數字(整數、浮點數)、甚至是二進制、但是值最大不能超過512M。

List

類似 Java 中的 List ,按照插入順序排序的字符串鏈表,在插入時,如果該鍵並不存在,Redis將爲該鍵創建一個新的鏈表。與此相反,如果鏈表中所有的元素均被移除,那麼該鍵也將會被從數據庫中刪除

Set
Set 就是一個集合,集合的概念就是一堆不重複值的組合。利用 Redis 提供的 Set 數據結構,可以存儲一些集合性的數據。比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。因爲 Redis 非常人性化的爲集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。

Sorted Set

和Sets相比,Sorted Sets是將 Set 中的元素增加了一個權重參數 score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學成績的 Sorted Sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。另外還可以用 Sorted Sets 來做帶權重的隊列,比如普通消息的 score 爲1,重要消息的 score 爲2,然後工作線程可以選擇按 score 的倒序來獲取工作任務。讓重要的任務優先執行。

Hash
在 Memcached 中,我們經常將一些結構化的信息打包成 hashmap,在客戶端序列化後存儲爲一個字符串的值(一般是 JSON 格式),比如用戶的暱稱、年齡、性別、積分等。這時候在需要修改其中某一項時,通常需要將字符串(JSON)取出來,然後進行反序列化,修改某一項的值,再序列化成字符串(JSON)存儲回去。簡單修改一個屬性就幹這麼多事情,消耗必定是很大的,也不適用於一些可能併發操作的場合(比如兩個併發的操作都需要修改積分)。而 Redis 的 Hash 結構可以使你像在數據庫中 Update 一個屬性一樣只修改某一項屬性值

全局命令

  • keys *:查看所有鍵

  • dbsize:鍵的總數

  • exists key:查看鍵是否存在

  • del key:刪除鍵

  • expire key seconds:鍵過期

  • type key:查看鍵的數據類型

單線程架構


命令到達服務端後,按隊列依次單線程執行

純內存存儲、 IO多路複用技術、單線程架構是造就 Redis高性能的三個因素。

epoll I/O多路複用提升IO性能

redis快的原因:

  1. 純內存訪問

  2. I/O多路複用:epoll

  3. 單線程避免線程競爭

keys全量遍歷鍵可能導致redis阻塞,可以在從節點上執行,或者使用漸進式的scan代替(可能漏掉期間進行的更新)

應用場景


  • 緩存。

  • 排行榜系統。redis提供了列表和有序集合支持。

  • 計數器應用。

  • 社交網絡。

  • 消息隊列系統。redis提供了訂閱發佈和阻塞隊列功能,雖然和專業的消息隊列軟件比不夠強大,但是可以滿足一般的消息隊列需求

Pipeline概念

edis客戶端執行一條命令分爲如下四個過程:
1)發送命令
2)命令排隊
3)命令執行
4)返回結果其中
1到4稱爲 Round Trip Time( RTT,往返時間)。
Pipeline(流水線)機制能將一組 Redis命令進行組裝,通過一次 RTT傳輸給 Redis,再將這組 Redis命令的執行結果按順序返回給客戶端。
Redis命令真正執行的時間通常在微秒級別,所以纔會有 Redis性能瓶頸是網絡這樣的說法。

持久


  1. RDB持久化方式會在一個特定的間隔保存那個時間點的一個數據快照。

  2. AOF持久化方式則會記錄每一個服務器收到的寫操作。在服務啓動時,這些記錄的操作會逐條執行從而重建出原來的數據。寫操作命令記錄的格式跟Redis協議一致,以追加的方式進行保存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章