Redis開發(fā)與運維

2021-04-20 21:34 更新

Redis開發(fā)與運維

付磊,張益軍 著

  • 出版社: 機械工業(yè)出版社
  • ISBN:9787111557975
  • 版次:1
  • 商品編碼:12121730
  • 品牌:機工出版
  • 包裝:平裝
  • 叢書名: 數(shù)據(jù)庫技術(shù)叢書
  • 開本:16
  • 出版時間:2017-03-01
  • 用紙:膠版紙


點此購買


編輯推薦

從開發(fā)、運維兩個角度總結(jié)了Redis實戰(zhàn)經(jīng)驗,深入淺出地剖析底層實現(xiàn),包含大規(guī)模集群開發(fā)與運維的實際案例、應(yīng)用技巧。

全面覆蓋Redis 3及以上版本的基本功能及應(yīng)用,提供了大量手繪版圖片,細膩講解底層實現(xiàn)機制


內(nèi)容簡介

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


作者簡介

付磊 搜狐視頻高級研發(fā)工程師,CacheCloud項目聯(lián)合創(chuàng)始人。擁有多年Redis開發(fā)運維經(jīng)驗,為公司多個核心業(yè)務(wù)提供Redis服務(wù),同時熱衷于技術(shù)傳播和分享,撰寫了大量關(guān)于Redis開發(fā)運維的技術(shù)文章。微博號carlosfl,博客地址是http://carlosfu.iteye.com。

張益軍 搜狐視頻資深研發(fā)工程師,CacheCloud項目聯(lián)合創(chuàng)始人,曾就職于美團、阿里巴巴等公司。搜狐視頻投放組負責(zé)人,目前從事投放平臺、反作弊等系統(tǒng)的架構(gòu)設(shè)計和優(yōu)化工作。研究興趣包括海量峰值訪問、分布式存儲等。微博號益軍YJ, 博客地址是http://hot66hot.iteye.com。


精彩書評

Redis在當(dāng)今高性能架構(gòu)中,發(fā)揮越來越重要的作用。本書對于體系性學(xué)習(xí)及掌握Redis,有非常好的參考作用。

——楊衛(wèi)華(Tim Yang),新浪微博研發(fā)副總經(jīng)理

作者對內(nèi)存的介紹做到了深入淺出,講清楚了重要的What、How。由于我從事分布式系統(tǒng)的開發(fā),因此非常欣慰地看到寫底層/infra領(lǐng)域的書籍,期待更多這方面的作品。寫書是非常辛苦的,需要投入大量的時間,非常感謝兩位作者艱苦卓絕的工作。

——劉奇,PingCAP CEO && TiDB/TiKV 創(chuàng)始人,Codis聯(lián)合作者

本書是付磊和張益軍在幾個大型項目中積累的Redis開發(fā)與運維的寶貴經(jīng)驗,既有原理功能使用詳解,又有實際踩坑排雷經(jīng)驗分享,最后一章對開源項目CacheCloud作了詳細的講解,是Redis開發(fā)、運維人員值得收藏的好書。

——田文寶,搜狐視頻技術(shù)總監(jiān)

這本書不僅介紹了Redis的使用方法 ,更難能可貴的是,作者在書中把使用和維護Redis時經(jīng)常會碰到的問題一一列舉了出來,并給出了相應(yīng)的解決方案。通過了解這些方案,讀者可以有效地避免使用Redis時會遇到的一些陷阱,并學(xué)會如何更好地使用Redis。

——黃健宏,《Redis設(shè)計與實現(xiàn)》作者

Redis是目前*流行的kv存儲。本書從Redis的客戶端使用,到內(nèi)部的實現(xiàn)原理,最后到運維,都給出翔實的解決方案,是Redis從入門到精通的一本好書。

——陳宗志,360基礎(chǔ)架構(gòu)組技術(shù)經(jīng)理,pika作者

作者不僅詳細地介紹Redis運維經(jīng)驗,而且深入淺出地剖析底層實現(xiàn),讓讀者不僅知其然,也知其所以然。Redis的集群運維絕非是一件容易的事兒,讀此書,可以少走一些彎路,繞過一些“坑”。

——張海雷,優(yōu)酷土豆廣告團隊資深工程師

這本書中Redis集群、開發(fā)運維陷阱、緩存設(shè)計和CacheCloud章節(jié)尤為精彩,都來自一線運維開發(fā)Redis的寶貴實戰(zhàn)經(jīng)驗。相信無論是DBA還是研發(fā)工程師都能從本書收獲新的知識。

——卓汝林,小米高級DBA

DevOps文化盛行,開發(fā)和運維的界線越來越模糊,在Redis的實踐中本書應(yīng)運而生。本書通過Redis開發(fā)運維詳實的介紹,結(jié)合真實項目凝聚*佳實戰(zhàn)經(jīng)驗,值得細細品味。

——李成武,阿里巴巴技術(shù)專家


目錄

序 言

前 言

致 謝

第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 配置、啟動、操作、關(guān)閉Redis 8

1.6 Redis重大版本 11

1.7 本章重點回顧 14

第2章 API的理解和使用 15

2.1 預(yù)備 15

2.1.1 全局命令 15

2.1.2 數(shù)據(jù)結(jié)構(gòu)和內(nèi)部編碼 18

2.1.3 單線程架構(gòu) 19

2.2 字符串 21

2.2.1 命令 22

2.2.2 內(nèi)部編碼 27

2.2.3 典型使用場景 28

2.3 哈希 31

2.3.1 命令 32

2.3.2 內(nèi)部編碼 35

2.3.3 使用場景 36

2.4 列表 38

2.4.1 命令 38

2.4.2 內(nèi)部編碼 43

2.4.3 使用場景 44

2.5 集合 46

2.5.1 命令 46

2.5.2 內(nèi)部編碼 50

2.5.3 使用場景 51

2.6 有序集合 52

2.6.1 命令 53

2.6.2 內(nèi)部編碼 59

2.6.3 使用場景 59

2.7 鍵管理 60

2.7.1 單個鍵管理 60

2.7.2 遍歷鍵 67

2.7.3 數(shù)據(jù)庫管理 70

2.8 本章重點回顧 73

第3章 小功能大用處 74

3.1 慢查詢分析 74

3.1.1 慢查詢的兩個配置參數(shù) 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 事務(wù)與Lua 87

3.4.1 事務(wù) 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 數(shù)據(jù)結(jié)構(gòu)模型 98

3.5.2 命令 98

3.5.3 Bitmaps分析 101

3.6 HyperLogLog 102

3.7 發(fā)布訂閱 105

3.7.1 命令 106

3.7.2 使用場景 108

3.8 GEO 109

3.9 本章重點回顧 112

第4章 客戶端 113

4.1 客戶端通信協(xié)議 113

4.2 Java客戶端Jedis 117

4.2.1 獲取Jedis 117

4.2.2 Jedis的基本使用方法 118

4.2.3 Jedis連接池的使用方法 122

4.2.4 Redis中Pipeline的使用方法 125

4.2.5 Jedis的Lua腳本 126

4.3 Python客戶端redis-py 128

4.3.1 獲取redis-py 128

4.3.2 redis-py的基本使用方法 128

4.3.3 redis-py中Pipeline的使用方法 130

4.3.4 redis-py中的Lua腳本使用方法 130

4.4 客戶端管理 131

4.4.1 客戶端API 132

4.4.2 客戶端相關(guān)配置 145

4.4.3 客戶端統(tǒng)計片段 145

4.5 客戶端常見異常 146

4.6 客戶端案例分析 149

4.6.1 Redis內(nèi)存陡增 149

4.6.2 客戶端周期性的超時 151

4.7 本章重點回顧 153

第5章 持久化 154

5.1 RDB 154

5.1.1 觸發(fā)機制 154

5.1.2 流程說明 155

5.1.3 RDB文件的處理 156

5.1.4 RDB的優(yōu)缺點 156

5.2 AOF 157

5.2.1 使用AOF 157

5.2.2 命令寫入 157

5.2.3 文件同步 158

5.2.4 重寫機制 159

5.2.5 重啟加載 161

5.2.6 文件校驗 162

5.3 問題定位與優(yōu)化 162

5.3.1 fork操作 162

5.3.2 子進程開銷監(jiān)控和優(yōu)化 163

5.3.3 AOF追加阻塞 165

5.4 多實例部署 166

5.5 本章重點回顧 167

第6章 復(fù)制 168

6.1 配置 168

6.1.1 建立復(fù)制 168

6.1.2 斷開復(fù)制 170

6.1.3 安全性 170

6.1.4 只讀 170

6.1.5 傳輸延遲 171

6.2 拓撲 171

6.3 原理 172

6.3.1 復(fù)制過程 172

6.3.2 數(shù)據(jù)同步 175

6.3.3 全量復(fù)制 178

6.3.4 部分復(fù)制 181

6.3.5 心跳 183

6.3.6 異步復(fù)制 184

6.4 開發(fā)與運維中的問題 184

6.4.1 讀寫分離 184

6.4.2 主從配置不一致 186

6.4.3 規(guī)避全量復(fù)制 186

6.4.4 規(guī)避復(fù)制風(fēng)暴 187

6.5 本章重點回顧 188

第7章 Redis的噩夢:阻塞 189

7.1 發(fā)現(xiàn)阻塞 189

7.2 內(nèi)在原因 191

7.2.1 API或數(shù)據(jù)結(jié)構(gòu)使用不合理 191

7.2.2 CPU飽和 193

7.2.3 持久化阻塞 194

7.3 外在原因 195

7.3.1 CPU競爭 195

7.3.2 內(nèi)存交換 195

7.3.3 網(wǎng)絡(luò)問題 196

7.4 本章重點回顧 199

第8章 理解內(nèi)存 200

8.1 內(nèi)存消耗 200

8.1.1 內(nèi)存使用統(tǒng)計 200

8.1.2 內(nèi)存消耗劃分 201

8.1.3 子進程內(nèi)存消耗 203

8.2 內(nèi)存管理 204

8.2.1 設(shè)置內(nèi)存上限 204

8.2.2 動態(tài)調(diào)整內(nèi)存上限 204

8.2.3 內(nèi)存回收策略 205

8.3 內(nèi)存優(yōu)化 209

8.3.1 redisObject對象 209

8.3.2 縮減鍵值對象 210

8.3.3 共享對象池 211

8.3.4 字符串優(yōu)化 213

8.3.5 編碼優(yōu)化 216

8.3.6 控制鍵的數(shù)量 223

8.4 本章重點回顧 225

第9章 哨兵 226

9.1 基本概念 226

9.1.1 主從復(fù)制的問題 227

9.1.2 高可用 227

9.1.3 Redis Sentinel的高可用性 229

9.2 安裝和部署 232

9.2.1 部署拓撲結(jié)構(gòu) 232

9.2.2 部署Redis數(shù)據(jù)節(jié)點 233

9.2.3 部署Sentinel節(jié)點 234

9.2.4 配置優(yōu)化 236

9.2.5 部署技巧 243

9.3 API 244

9.4 客戶端連接 249

9.4.1 Redis Sentinel的客戶端 249

9.4.2 Redis Sentinel客戶端基本實現(xiàn)原理 249

9.4.3 Java操作Redis Sentinel 251

9.5 實現(xiàn)原理 254

9.5.1 三個定時監(jiān)控任務(wù) 254

9.5.2 主觀下線和客觀下線 256

9.5.3 領(lǐng)導(dǎo)者Sentinel節(jié)點選舉 258

9.5.4 故障轉(zhuǎn)移 261

9.6 開發(fā)與運維中的問題 262

9.6.1 故障轉(zhuǎn)移日志分析 262

9.6.2 節(jié)點運維 268

9.6.3 高可用讀寫分離 271

9.7 本章重點回顧 272

第10章 集群 274

10.1 數(shù)據(jù)分布 274

10.1.1 數(shù)據(jù)分布理論 274

10.1.2 Redis數(shù)據(jù)分區(qū) 277

10.1.3 集群功能限制 278

10.2 搭建集群 278

10.2.1 準(zhǔn)備節(jié)點 278

10.2.2 節(jié)點握手 280

10.2.3 分配槽 282

10.2.4 用redis-trib.rb搭建集群 284

10.3 節(jié)點通信 287

10.3.1 通信流程 287

10.3.2 Gossip消息 287

10.3.3 節(jié)點選擇 290

10.4 集群伸縮 291

10.4.1 伸縮原理 291

10.4.2 擴容集群 293

10.4.3 收縮集群 301

10.5 請求路由 305

10.5.1 請求重定向 305

10.5.2 Smart客戶端 309

10.5.3 ASK重定向 318

10.6 故障轉(zhuǎn)移 323

10.6.1 故障發(fā)現(xiàn) 323

10.6.2 故障恢復(fù) 329

10.6.3 故障轉(zhuǎn)移時間 334

10.6.4 故障轉(zhuǎn)移演練 334

10.7 集群運維 336

10.7.1 集群完整性 336

10.7.2 帶寬消耗 337

10.7.3 Pub/Sub廣播問題 337

10.7.4 集群傾斜 338

10.7.5 集群讀寫分離 339

10.7.6 手動故障轉(zhuǎn)移 341

10.7.7 數(shù)據(jù)遷移 344

10.8 本章重點回顧 344

第11章 緩存設(shè)計 346

11.1 緩存的收益和成本 346

11.2 緩存更新策略 347

11.3 緩存粒度控制 349

11.4 穿透優(yōu)化 350

11.5 無底洞優(yōu)化 352

11.6 雪崩優(yōu)化 359

11.7 熱點key重建優(yōu)化 360

11.8 本章重點回顧 364

第12章 開發(fā)運維的“陷阱” 365

12.1 Linux配置優(yōu)化 365

12.1.1 內(nèi)存分配控制 365

12.1.2 swappiness 367

12.1.3 THP 369

12.1.4 OOM killer 370

12.1.5 使用NTP 371

12.1.6 ulimit 371

12.1.7 TCP backlog 372

12.2 flushall/flushdb誤操作 372

12.2.1 緩存與存儲 373

12.2.2 借助AOF機制恢復(fù) 373

12.2.3 RDB有什么變化 374

12.2.4 從節(jié)點有什么變化 374

12.2.5 快速恢復(fù)數(shù)據(jù) 374

12.3 安全的Redis 375

12.3.1 Redis密碼機制 377

12.3.2 偽裝危險命令 378

12.3.3 防火墻 380

12.3.4 bind 380

12.3.5 定期備份數(shù)據(jù) 381

12.3.6 不使用默認端口 381

12.3.7 使用非root用戶啟動 381

12.4 處理bigkey 382

12.4.1 bigkey的危害 382

12.4.2 如何發(fā)現(xiàn) 382

12.4.3 如何刪除 383

12.4.4 最佳實踐思路 386

12.5 尋找熱點key 386

12.6 本章重點回顧 391

第13章 Redis監(jiān)控運維云平臺CacheCloud 392

13.1 CacheCloud是什么 392

13.1.1 現(xiàn)有問題 393

13.1.2 CacheCloud基本功能 393

13.2 快速部署 395

13.2.1 CacheCloud環(huán)境需求 395

13.2.2 CacheCloud快速開始 395

13.3 機器部署 397

13.3.1 部署腳本 398

13.3.2 添加機器 399

13.4 接入應(yīng)用 400

13.4.1 總體流程 401

13.4.2 賬戶申請和審批 401

13.4.3 應(yīng)用申請和審批 402

13.4.4 客戶端接入 405

13.5 用戶功能 407

13.5.1 應(yīng)用統(tǒng)計信息 408

13.5.2 實例列表 409

13.5.3 應(yīng)用詳情 409

13.5.4 命令曲線 409

13.5.5 CacheCloud Redis Shell控制臺 410

13.5.6 慢查詢 410

13.5.7 應(yīng)用拓撲 411

13.6 運維功能 413

13.6.1 應(yīng)用運維 413

13.6.2 接入已存在的Redis節(jié)點 415

13.6.3 Redis配置模板 416

13.6.4 遷移工具 417

13.6.5 監(jiān)控報警 420

13.6.6 系統(tǒng)配置管理 422

13.7 客戶端上報 423

13.7.1 客戶端上報整體設(shè)計 424

13.7.2 Jedis核心代碼修改 424

13.7.3 帶上報功能的客戶端 426

13.7.4 CacheCloud客戶端統(tǒng)計 427

13.8 本章重點回顧 429

第14章 Redis配置統(tǒng)計字典 430

14.1 info系統(tǒng)狀態(tài)說明 430

14.1.1 命令說明 430

14.1.2 詳細說明 431

14.2 standalone配置說明和分析 436

14.2.1 總體配置 436

14.2.2 最大內(nèi)存及策略 437

14.2.3 AOF相關(guān)配置 437

14.2.4 RDB相關(guān)配置 438

14.2.5 慢查詢配置 438

14.2.6 數(shù)據(jù)結(jié)構(gòu)優(yōu)化配置 439

14.2.7 復(fù)制相關(guān)配置 439

14.2.8 客戶端相關(guān)配置 440

14.2.9 安全相關(guān)配置 440

14.3 Sentinel配置說明和分析 440

14.4 Cluster配置說明和分析 441


前言/序言

序  言Preface

近幾年,隨著移動互聯(lián)網(wǎng)的飛速發(fā)展,我們享受著整個社會的技術(shù)進步帶來的便利,但同時也給從業(yè)者帶來了如何保證項目的高并發(fā)、低延時的技術(shù)挑戰(zhàn),相應(yīng)的互聯(lián)網(wǎng)技術(shù)也隨之發(fā)生了重大變革,NoSQL技術(shù)得到了蓬勃的發(fā)展。Redis以其出色的性能、豐富的功能、良好的穩(wěn)定性、分布式架構(gòu)的支持等特性,得到了業(yè)界廣泛的關(guān)注和應(yīng)用。毫不夸張地說,Redis已經(jīng)成為IT互聯(lián)網(wǎng)大型系統(tǒng)的標(biāo)配,熟練掌握Redis成為開發(fā)、運維人員的必備技能。

本書是作者近三年Redis開發(fā)運維的經(jīng)驗結(jié)晶和技術(shù)沉淀,書中對于Redis的相關(guān)知識做了系統(tǒng)全面的介紹,因此,可以幫助Redis初學(xué)者快速入門和提高。同時,縱觀全書,作者的視角未局限于Redis本身,還融入了大量高并發(fā)系統(tǒng)的設(shè)計、開發(fā)及運維調(diào)優(yōu)經(jīng)驗,而是深入淺出的剖析底層實現(xiàn),讓讀者不僅知其然,也知其所以然。因此,對于有一定Redis使用經(jīng)驗的從業(yè)者,本書也有學(xué)習(xí)參考價值。

兩位作者是搜狐視頻的技術(shù)架構(gòu)專家,始終保持對技術(shù)的熱忱和嚴(yán)謹(jǐn),對搜狐視頻大型分布式系統(tǒng)的技術(shù)選型、架構(gòu)設(shè)計、開發(fā)運維提供了堅實的保障。在承擔(dān)搜狐視頻個性化推薦系統(tǒng)等多個核心系統(tǒng)的設(shè)計開發(fā)運維工作期間,兩位作者對高并發(fā)、低延時的大型分布式系統(tǒng)積累了豐富的經(jīng)驗,其中就包含了大量Redis的實踐經(jīng)驗。作為公司開發(fā)運維的開拓者,從項目中抽離出Redis集群的自動運維系統(tǒng)CacheCloud,在公司內(nèi)部多個業(yè)務(wù)線推廣使用,積累了豐富的Redis大規(guī)模集群的運維優(yōu)化經(jīng)驗。所在團隊于2016年3月將該項目在GitHub上開源,由于其具有快速部署、全面監(jiān)控、一鍵運維等特性,一開源即受到廣大Redis開發(fā)運維人員的歡迎和認可。

以我對兩位作者的優(yōu)秀技術(shù)素養(yǎng)的熟知,及對他們負責(zé)項目的了解,我相信這本書會給大家?guī)矶恳恍碌母杏X。感謝兩位作者對開源項目CacheCloud的貢獻,更難能可貴的是他們將其開發(fā)運維的寶貴經(jīng)驗匯聚成冊,給我們帶來了這樣一本好書。

馬義

搜狐視頻產(chǎn)品技術(shù)中心總經(jīng)理、56網(wǎng)總經(jīng)理

2016年11月

前  言Introduction

Redis作為基于鍵值對的NoSQL數(shù)據(jù)庫,具有高性能、豐富的數(shù)據(jù)結(jié)構(gòu)、持久化、高可用、分布式等特性,同時Redis本身非常穩(wěn)定,已經(jīng)得到業(yè)界的廣泛認可和使用。掌握Redis已經(jīng)逐步成為開發(fā)和運維人員的必備技能之一。

本書關(guān)注了Redis開發(fā)運維的方方面面,尤其對于開發(fā)運維中如何提高效率、減少可能遇到的問題進行詳細分析,但本書不單單介紹怎么解決這些問題,而是通過對Redis重要原理的解析,幫助開發(fā)運維人員學(xué)會找到問題的方法,以及理解背后的原理,從而讓開發(fā)運維人員不僅知其然,而且知其所以然。

本書涵蓋內(nèi)容

第1章 初識Redis,帶領(lǐng)讀者進入Redis的世界,了解它的前世今生、眾多特性、應(yīng)用場景、安裝配置、簡單使用,最后對Redis發(fā)展過程中的重要版本進行說明,可以讓讀者對Redis有一個全面的認識。

第2章 API的理解和使用,全面介紹了Redis提供的5種數(shù)據(jù)結(jié)構(gòu)字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的數(shù)據(jù)模型、常用命令、典型應(yīng)用場景,并且每個小節(jié)都會給出在Redis開發(fā)過程可能要注意的坑和技巧。同時本章還會對Redis的單線程處理機制、鍵值管理做一個全面介紹,通過對這些原理的理解,讀者可以在合適的應(yīng)用場景選擇合適的數(shù)據(jù)結(jié)構(gòu)和命令進行開發(fā),有效提高程序效率,降低可能產(chǎn)生的問題和隱患。

第3章 小功能大用處,除了5種數(shù)據(jù)結(jié)構(gòu)外,Redis還提供了諸如慢查詢、Redis Shell、Pipeline、Lua腳本、Bitmaps、HyperLogLog、發(fā)布訂閱、GEO等附加功能,在這些功能的幫助下,Redis的應(yīng)用場景更加豐富。

第4章 客戶端,本章重點關(guān)注Redis客戶端的開發(fā),介紹了Redis的客戶端通信協(xié)

議、詳細講解了Java客戶端Jedis的使用技巧,同時通過從原理角度剖析在開發(fā)運維中,客戶端的監(jiān)控和管理技巧,最后給出客戶端開發(fā)中常見問題以及案例講解。

第5章 持久化,Redis的持久化功能有效避免因進程退出造成的數(shù)據(jù)丟失問題,本章首先介紹RDB和AOF兩種持久化配置和運行流程,其次對常見的持久化問題進行定位和優(yōu)化,最后結(jié)合Redis常見的單機多實例部署場景進行優(yōu)化。

第6章 復(fù)制,在分布式系統(tǒng)中為了解決單點問題,通常會把數(shù)據(jù)復(fù)制多個副本部署到其他機器,用于故障恢復(fù)和負載均衡等需求,Redis也是如此。它為我們提供了復(fù)制(replication)功能,實現(xiàn)了多個相同數(shù)據(jù)的Redis副本。復(fù)制功能是高可用Redis的基礎(chǔ),后面章節(jié)的哨兵和集群都是在復(fù)制的基礎(chǔ)上實現(xiàn)高可用。

第7章 Redis的噩夢:阻塞,Redis是典型的單線程架構(gòu),所有的讀寫操作都在一條主線程中完成的。當(dāng)Redis用于高并發(fā)場景時這條線程就變成了它的生命線。如果出現(xiàn)阻塞哪怕是很短時間對于我們的應(yīng)用來說都是噩夢。導(dǎo)致阻塞問題的場景大致分為內(nèi)在原因和外在原因,本章將進行詳細分析。

第8章 理解內(nèi)存,Redis所有的數(shù)據(jù)存在于內(nèi)存中,如何高效利用Redis內(nèi)存變得非常重要。高效利用Redis內(nèi)存首先需要理解Redis內(nèi)存消耗在哪里,如何管理內(nèi)存,最后再深入到如何優(yōu)化內(nèi)存。掌握這些知識后相信讀者能夠?qū)崿F(xiàn)用更少的內(nèi)存存儲更多的數(shù)據(jù)從而降低成本。

第9章 哨兵,Redis從2.8版本開始正式提供了Redis Sentinel,它有效解決了主從復(fù)制模式下故障轉(zhuǎn)移的若干問題,為Redis提供了高可用功能。本章將一步步解析Redis Sentinel的相關(guān)概念、安裝部署、配置、命令使用、原理解析,最后分析了Redis Sentinel運維中的一些問題。

第10章 集群,是本書的重頭戲,Redis Cluster是Redis 3提供的Redis分布式解決方案,有效解決了Redis分布式方面的需求,理解應(yīng)用好Redis Cluster將極大的解放我們對分布式Redis的需求,同時它也是學(xué)習(xí)分布式存儲的絕佳案例。本章將針對RedisCluster的數(shù)據(jù)分布,搭建集群,節(jié)點通信,請求路由,集群伸縮,故障轉(zhuǎn)移等方面進行分析說明。

第11章 緩存設(shè)計,緩存能夠有效加速應(yīng)用的讀寫速度,以及降低后端負載,對于開發(fā)人員進行日常應(yīng)用的開發(fā)至關(guān)重要,但是將緩存加入應(yīng)用架構(gòu)后也會帶來一些問題,本章將介紹緩存使用和設(shè)計中遇到的問題,具體包括:緩存的收益和成本、緩存更新策略、緩存粒度控制、穿透問題優(yōu)化、無底洞問題優(yōu)化、雪崩問題優(yōu)化、熱點key優(yōu)化。

第12章 開發(fā)運維的“陷阱”,介紹Redis開發(fā)運維中的一些棘手問題,具體包括:Linux配置優(yōu)化、flush誤操作數(shù)據(jù)恢復(fù)、如何讓Redis變得安全、bigkey問題、熱點key問題。

第13章 Redis監(jiān)控運維云平臺CacheCloud,介紹筆者所在團隊開源的Redis運維工具CacheCloud,它有效解決了Redis監(jiān)控和運維中的一些問題,本章將按照快速部署、機器部署、接入應(yīng)用、用戶功能、運維功能多個維度全面的介紹CacheCloud,相信在它的幫助下,讀者可以更好的監(jiān)控和運維好Redis。

第14章 Redis配置統(tǒng)計字典,會對Redis的系統(tǒng)狀態(tài)信息以及全部配置做一個全面的梳理,希望本章能夠成為Redis配置統(tǒng)計字典,協(xié)助大家分析和解決日常開發(fā)和運維中遇到的問題。

目標(biāo)讀者

本書深入淺出地介紹了Redis相關(guān)知識,因此可以作為Redis新手的入門教程,同時本書凝聚了兩位筆者在Redis開發(fā)運維的多年經(jīng)驗,對于需要進一步提高Redis開發(fā)運維能力的讀者也非常適合。讀者可以參考下圖,結(jié)合自身對于開發(fā)運維的需求進行閱讀,但筆者依然建議讀者對每一章都進行閱讀。

讀者反饋和勘誤

由于筆者能力有限,書中難免會存在錯誤和疏漏,讀者有任何意見和建議可以通過發(fā)送郵件、網(wǎng)站留言,或者直接在QQ群留言,我們會在第一時間進行反饋。

郵箱:redis_devops_book@163.com

網(wǎng)站:https://cachecloud.github.io/,該網(wǎng)站持續(xù)更新Redis開發(fā)運維的相關(guān)知識和經(jīng)驗。

QQ群:534429768

著者

2016年9月

致  謝Acknowledgements

感謝業(yè)內(nèi)眾多Redis專家對于本書的審閱,他們分別是黃健宏、楊衛(wèi)華(Tim Yang)、劉奇、卓汝林、黃鵬程、張海雷、諸超、陳宗志、李成武,他們?yōu)楸緯岢龊軐氋F的意見和建議。

感謝我們公司的領(lǐng)導(dǎo)和同事,沒有他們的幫助和支持,本書無法按時完成,他們是馬義、田文寶、閔博、陳實、張嘯豐、趙欣蒞、張文、董剛鋒 、趙路、高永飛、曾旭、孫孟萌、田文龍、龐云龍、李明月、戴育東、單穎博、唐虎、賀永明、郭嶺、谷海波。

我們要感謝機械工業(yè)出版社的吳怡編輯對我們寫作的支持、鼓勵和指導(dǎo),她一絲不茍的工作態(tài)度讓人欽佩。

最后,我們要感謝家人和朋友,感謝在寫書期間他們的支持和鼓勵,從而讓本書順利完成。


點此購買





以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號