<b>資料庫技術叢書</b>
<b>redis開發與運維</b>
<b>付磊</b>
張翼軍編著
redis作為基于鍵值對的nosql資料庫,具有高性能、豐富的資料結構、持久化、高可用、分布式等特性,同時redis本身非常穩定,已經得到業界的廣泛認可和使用。掌握redis已經逐漸成為開發和運維人員的必備技能之一。
本書關注了redis開發運維的方方面面,尤其對于開發運維中如何提高效率、減少可能遇到的問題進行詳細分析,但本書不單單介紹怎麼解決這些問題,而是通過對redis重要原理的解析,幫助開發運維人員學會找到問題的方法,以及了解背後的原理,進而讓開發運維人員不僅知其然,而且知其是以然。
本書涵蓋内容
第1章 初識redis,帶領讀者進入redis的世界,了解它的前世今生、衆多特性、應用場景、安裝配置、簡單使用,最後對redis發展過程中的重要版本進行說明,可以讓讀者對redis有一個全面的認識。
第2章 api的了解和使用,全面介紹了redis提供的5種資料結構字元串(string)、哈希(hash)、清單(list)、集合(set)、有序集合(zset)的資料模型、常用指令、典型應用場景,并且每個小節都會給出在redis開發過程可能要注意的坑和技巧。同時本章還會對redis的單線程處理機制、鍵值管理做一個全面介紹,通過對這些原理的了解,讀者可以在合适的應用場景選擇合适的資料結構和指令進行開發,有效提高程式效率,降低可能産生的問題和隐患。
第3章 小功能大用處,除了5種資料結構外,redis還提供了諸如慢查詢、redis shell、pipeline、lua腳本、bitmaps、hyperloglog、釋出訂閱、geo等附加功能,在這些功能的幫助下,redis的應用場景更加豐富。
第4章 用戶端,本章重點關注redis用戶端的開發,介紹了redis的用戶端通信協
議、詳細講解了java用戶端jedis的使用技巧,同時通過從原理角度剖析在開發運維中,用戶端的監控和管理技巧,最後給出用戶端開發中常見問題以及案例講解。
第5章 持久化,redis的持久化功能有效避免因程序退出造成的資料丢失問題,本章首先介紹rdb和aof兩種持久化配置和運作流程,其次對常見的持久化問題進行定位和優化,最後結合redis常見的單機多執行個體部署場景進行優化。
第6章 複制,在分布式系統中為了解決單點問題,通常會把資料複制多個副本部署到其他機器,用于故障恢複和負載均衡等需求,redis也是如此。它為我們提供了複制(replication)功能,實作了多個相同資料的redis副本。複制功能是高可用redis的基礎,後面章節的哨兵和叢集都是在複制的基礎上實作高可用。
第7章 redis的噩夢:阻塞,redis是典型的單線程架構,所有的讀寫操作都在一條主線程中完成的。當redis用于高并發場景時這條線程就變成了它的生命線。如果出現阻塞哪怕是很短時間對于我們的應用來說都是噩夢。導緻阻塞問題的場景大緻分為内在原因和外在原因,本章将進行詳細分析。
第8章 了解記憶體,redis所有的資料存在于記憶體中,如何高效利用redis記憶體變得非常重要。高效利用redis記憶體首先需要了解redis記憶體消耗在哪裡,如何管理記憶體,最後再深入到如何優化記憶體。掌握這些知識後相信讀者能夠實作用更少的記憶體存儲更多的資料進而降低成本。
第9章 哨兵,redis從2.8版本開始正式提供了redis sentinel,它有效解決了主從複制模式下故障轉移的若幹問題,為redis提供了高可用功能。本章将一步步解析redis sentinel的相關概念、安裝部署、配置、指令使用、原了解析,最後分析了redis sentinel運維中的一些問題。
第10章 叢集,是本書的重頭戲,redis cluster是redis 3提供的redis分布式解決方案,有效解決了redis分布式方面的需求,了解應用好redis cluster将極大的解放我們對分布式redis的需求,同時它也是學習分布式存儲的絕佳案例。本章将針對rediscluster的資料分布,搭建叢集,節點通信,請求路由,叢集伸縮,故障轉移等方面進行分析說明。
第11章 緩存設計,緩存能夠有效加速應用的讀寫速度,以及降低後端負載,對于開發人員進行日常應用的開發至關重要,但是将緩存加入應用架構後也會帶來一些問題,本章将介紹緩存使用和設計中遇到的問題,具體包括:緩存的收益和成本、緩存更新政策、緩存粒度控制、穿透問題優化、無底洞問題優化、雪崩問題優化、熱點key優化。
第12章 開發運維的“陷阱”,介紹redis開發運維中的一些棘手問題,具體包括:linux配置優化、flush誤操作資料恢複、如何讓redis變得安全、bigkey問題、熱點key問題。
第13章 redis監控運維雲平台cachecloud,介紹筆者所在團隊開源的redis運維工具cachecloud,它有效解決了redis監控和運維中的一些問題,本章将按照快速部署、機器部署、接入應用、使用者功能、運維功能多個次元全面的介紹cachecloud,相信在它的幫助下,讀者可以更好的監控和運維好redis。
第14章 redis配置統計字典,會對redis的系統狀态資訊以及全部配置做一個全面的梳理,希望本章能夠成為redis配置統計字典,協助大家分析和解決日常開發和運維中遇到的問題。
目标讀者
本書深入淺出地介紹了redis相關知識,是以可以作為redis新手的入門教程,同時本書凝聚了兩位筆者在redis開發運維的多年經驗,對于需要進一步提高redis開發運維能力的讀者也非常适合。讀者可以參考下圖,結合自身對于開發運維的需求進行閱讀,但筆者依然建議讀者對每一章都進行閱讀。
讀者回報和勘誤
由于筆者能力有限,書中難免會存在錯誤和疏漏,讀者有任何意見和建議可以通過發送郵件、網站留言,或者直接在qq群留言,我們會在第一時間進行回報。
網站:https://cachecloud.github.io/,該網站持續更新redis開發運維的相關知識和經驗。
qq群:534429768
著者
2016年9月
第1章 初識redis 1
1.1 盛贊redis 1
1.2 redis特性 2
1.3 redis使用場景 5
1.3.1 redis可以做什麼 5
1.3.2 redis不可以做什麼 5
1.4 用好redis的建議 6
1.5 正确安裝并啟動redis 6
1.5.1 安裝redis 7
1.5.2 配置、啟動、操作、關閉redis 8
1.6 redis重大版本 11
1.7 本章重點回顧 14
第2章 api的了解和使用 15
2.1 預備 15
2.1.1 全局指令 15
2.1.2 資料結構和内部編碼 18
2.1.3 單線程架構 19
2.2 字元串 21
2.2.1 指令 22
2.2.2 内部編碼 27
2.2.3 典型使用場景 28
2.3 哈希 31
2.3.1 指令 32
2.3.2 内部編碼 35
2.3.3 使用場景 36
2.4 清單 38
2.4.1 指令 38
2.4.2 内部編碼 43
2.4.3 使用場景 44
2.5 集合 46
2.5.1 指令 46
2.5.2 内部編碼 50
2.5.3 使用場景 51
2.6 有序集合 52
2.6.1 指令 53
2.6.2 内部編碼 59
2.6.3 使用場景 59
2.7 鍵管理 60
2.7.1 單個鍵管理 60
2.7.2 周遊鍵 67
2.7.3 資料庫管理 70
2.8 本章重點回顧 73
第3章 小功能大用處 74
3.1 慢查詢分析 74
3.1.1 慢查詢的兩個配置參數 75
3.1.2 最佳實踐 77
3.2 redis shell 78
3.2.1 redis-cli詳解 78
3.2.2 redis-server詳解 82
3.2.3 redis-benchmark詳解 83
3.3 pipeline 84
3.3.1 pipeline概念 84
3.3.2 性能測試 85
3.3.3 原生批量指令與pipeline對比 86
3.3.4 最佳實踐 87
3.4 事務與lua 87
3.4.1 事務 87
3.4.2 lua用法簡述 90
3.4.3 redis與lua 92
3.4.4 案例 94
3.4.5 redis如何管理lua腳本 96
3.5 bitmaps 98
3.5.1 資料結構模型 98
3.5.2 指令 98
3.5.3 bitmaps分析 101
3.6 hyperloglog 102
3.7 釋出訂閱 105
3.7.1 指令 106
3.7.2 使用場景 108
3.8 geo 109
3.9 本章重點回顧 112