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

最近看完了《Redis開發與運維》分享給你們。redis

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


用心之做。惟一我的認爲能夠再優化的是,監控軟件的安裝,不少配置都默認寫在一些文件,致使自定義安裝目錄時帶來部分不變,,,可是依然不能妨礙書自己的精品。大力推薦 ,不論是 redis 新手 老手,都能學到不少。緩存


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


初識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性能瓶頸是網絡這樣的說法。複製代碼

Re

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


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


相關文章
相關標籤/搜索