定 價(jià):89 元
叢書名:數(shù)據(jù)庫技術(shù)叢書
- 作者:付磊 張益軍
- 出版時(shí)間:2017/2/1
- ISBN:9787111557975
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.138RE
- 頁碼:
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書主要講解Redis基本功能及其應(yīng)用,以及線上開發(fā)與運(yùn)維監(jiān)控中的實(shí)際使用案例,包含大規(guī)模集群開發(fā)與管理的場(chǎng)景、應(yīng)用案例與開發(fā)技巧,并總結(jié)了實(shí)際開發(fā)中遇到的坑。本書不要求讀者有任何Redis使用經(jīng)驗(yàn),對(duì)入門與進(jìn)階DevOps的開發(fā)者提供有價(jià)值的幫助。主要內(nèi)容包括:Redis的安裝配置、API、客戶端、持久化、復(fù)制、高可用、集群、緩存設(shè)計(jì)等基本功能,Redis高可用集群解決方案,Redis設(shè)計(jì)和使用的問題,開發(fā)運(yùn)維中的陷阱,CacheCloud私有云的開發(fā)案例等。
本書作者來自一線開發(fā)團(tuán)隊(duì),深入分析并總結(jié)了實(shí)際工作中遇到的陷阱,以及背后的原因, 包含大規(guī)模集群開發(fā)與管理的場(chǎng)景、案例、技巧,為高效開發(fā)運(yùn)維提供了大量實(shí)際經(jīng)驗(yàn)和建議。本書不要求讀者有任何Redis使用經(jīng)驗(yàn),對(duì)入門與進(jìn)階DevOps的開發(fā)者提供有價(jià)值的幫助。
前 言?IntroductionRedis作為基于鍵值對(duì)的NoSQL數(shù)據(jù)庫,具有高性能、豐富的數(shù)據(jù)結(jié)構(gòu)、持久化、高可用、分布式等特性,同時(shí)Redis本身非常穩(wěn)定,已經(jīng)得到業(yè)界的廣泛認(rèn)可和使用。掌握Redis已經(jīng)逐步成為開發(fā)和運(yùn)維人員的必備技能之一。
本書關(guān)注了Redis開發(fā)運(yùn)維的方方面面,尤其對(duì)于開發(fā)運(yùn)維中如何提高效率、減少可能遇到的問題進(jìn)行詳細(xì)分析,但本書不單單介紹怎么解決這些問題,而是通過對(duì)Redis重要原理的解析,幫助開發(fā)運(yùn)維人員學(xué)會(huì)找到問題的方法,以及理解背后的原理,從而讓開發(fā)運(yùn)維人員不僅知其然,而且知其所以然。
本書涵蓋內(nèi)容第1章 初識(shí)Redis,帶領(lǐng)讀者進(jìn)入Redis的世界,了解它的前世今生、眾多特性、應(yīng)用場(chǎng)景、安裝配置、簡(jiǎn)單使用,最后對(duì)Redis發(fā)展過程中的重要版本進(jìn)行說明,可以讓讀者對(duì)Redis有一個(gè)全面的認(rèn)識(shí)。
第2章 API的理解和使用,全面介紹了Redis提供的5種數(shù)據(jù)結(jié)構(gòu)字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的數(shù)據(jù)模型、常用命令、典型應(yīng)用場(chǎng)景,并且每個(gè)小節(jié)都會(huì)給出在Redis開發(fā)過程可能要注意的坑和技巧。同時(shí)本章還會(huì)對(duì)Redis的單線程處理機(jī)制、鍵值管理做一個(gè)全面介紹,通過對(duì)這些原理的理解,讀者可以在合適的應(yīng)用場(chǎng)景選擇合適的數(shù)據(jù)結(jié)構(gòu)和命令進(jìn)行開發(fā),有效提高程序效率,降低可能產(chǎn)生的問題和隱患。
第3章 小功能大用處,除了5種數(shù)據(jù)結(jié)構(gòu)外,Redis還提供了諸如慢查詢、Redis Shell、Pipeline、Lua腳本、Bitmaps、HyperLogLog、發(fā)布訂閱、GEO等附加功能,在這些功能的幫助下,Redis的應(yīng)用場(chǎng)景更加豐富。
第4章 客戶端,本章重點(diǎn)關(guān)注Redis客戶端的開發(fā),介紹了Redis的客戶端通信協(xié)議、詳細(xì)講解了Java客戶端Jedis的使用技巧,同時(shí)通過從原理角度剖析在開發(fā)運(yùn)維中,客戶端的監(jiān)控和管理技巧,最后給出客戶端開發(fā)中常見問題以及案例講解。
第5章 持久化,Redis的持久化功能有效避免因進(jìn)程退出造成的數(shù)據(jù)丟失問題,本章首先介紹RDB和AOF兩種持久化配置和運(yùn)行流程,其次對(duì)常見的持久化問題進(jìn)行定位和優(yōu)化,最后結(jié)合Redis常見的單機(jī)多實(shí)例部署場(chǎng)景進(jìn)行優(yōu)化。
第6章 復(fù)制,在分布式系統(tǒng)中為了解決單點(diǎn)問題,通常會(huì)把數(shù)據(jù)復(fù)制多個(gè)副本部署到其他機(jī)器,用于故障恢復(fù)和負(fù)載均衡等需求,Redis也是如此。它為我們提供了復(fù)制(replication)功能,實(shí)現(xiàn)了多個(gè)相同數(shù)據(jù)的Redis副本。復(fù)制功能是高可用Redis的基礎(chǔ),后面章節(jié)的哨兵和集群都是在復(fù)制的基礎(chǔ)上實(shí)現(xiàn)高可用。
第7章 Redis的噩夢(mèng):阻塞,Redis是典型的單線程架構(gòu),所有的讀寫操作都在一條主線程中完成的。當(dāng)Redis用于高并發(fā)場(chǎng)景時(shí)這條線程就變成了它的生命線。如果出現(xiàn)阻塞哪怕是很短時(shí)間對(duì)于我們的應(yīng)用來說都是噩夢(mèng)。導(dǎo)致阻塞問題的場(chǎng)景大致分為內(nèi)在原因和外在原因,本章將進(jìn)行詳細(xì)分析。
第8章 理解內(nèi)存,Redis所有的數(shù)據(jù)存在于內(nèi)存中,如何高效利用Redis內(nèi)存變得非常重要。高效利用Redis內(nèi)存首先需要理解Redis內(nèi)存消耗在哪里,如何管理內(nèi)存,最后再深入到如何優(yōu)化內(nèi)存。掌握這些知識(shí)后相信讀者能夠?qū)崿F(xiàn)用更少的內(nèi)存存儲(chǔ)更多的數(shù)據(jù)從而降低成本。
第9章 哨兵,Redis從2.8版本開始正式提供了Redis Sentinel,它有效解決了主從復(fù)制模式下故障轉(zhuǎn)移的若干問題,為Redis提供了高可用功能。本章將一步步解析Redis Sentinel的相關(guān)概念、安裝部署、配置、命令使用、原理解析,最后分析了Redis Sentinel運(yùn)維中的一些問題。
第10章 集群,是本書的重頭戲,Redis Cluster是Redis 3提供的Redis分布式解決方案,有效解決了Redis分布式方面的需求,理解應(yīng)用好Redis Cluster將極大的解放我們對(duì)分布式Redis的需求,同時(shí)它也是學(xué)習(xí)分布式存儲(chǔ)的絕佳案例。本章將針對(duì)RedisCluster的數(shù)據(jù)分布,搭建集群,節(jié)點(diǎn)通信,請(qǐng)求路由,集群伸縮,故障轉(zhuǎn)移等方面進(jìn)行分析說明。
第11章 緩存設(shè)計(jì),緩存能夠有效加速應(yīng)用的讀寫速度,以及降低后端負(fù)載,對(duì)于開發(fā)人員進(jìn)行日常應(yīng)用的開發(fā)至關(guān)重要,但是將緩存加入應(yīng)用架構(gòu)后也會(huì)帶來一些問題,本章將介紹緩存使用和設(shè)計(jì)中遇到的問題,具體包括:緩存的收益和成本、緩存更新策略、緩存粒度控制、穿透問題優(yōu)化、無底洞問題優(yōu)化、雪崩問題優(yōu)化、熱點(diǎn)key優(yōu)化。
第12章 開發(fā)運(yùn)維的陷阱,介紹Redis開發(fā)運(yùn)維中的一些棘手問題,具體包括:Linux配置優(yōu)化、flush誤操作數(shù)據(jù)恢復(fù)、如何讓Redis變得安全、bigkey問題、熱點(diǎn)key問題。
第13章 Redis監(jiān)控運(yùn)維云平臺(tái)CacheCloud,介紹筆者所在團(tuán)隊(duì)開源的Redis運(yùn)維工具CacheCloud,它有效解決了Redis監(jiān)控和運(yùn)維中的一些問題,本章將按照快速部署、機(jī)器部署、接入應(yīng)用、用戶功能、運(yùn)維功能多個(gè)維度全面的介紹CacheCloud,相信在它的幫助下,讀者可以更好的監(jiān)控和運(yùn)維好Redis。
第14章 Redis配置統(tǒng)計(jì)字典,會(huì)對(duì)Redis的系統(tǒng)狀態(tài)信息以及全部配置做一個(gè)全面的梳理,希望本章能夠成為Redis配置統(tǒng)計(jì)字典,協(xié)助大家分析和解決日常開發(fā)和運(yùn)維中遇到的問題。
目標(biāo)讀者本書深入淺出地介紹了Redis相關(guān)知識(shí),因此可以作為Redis新手的入門教程,同時(shí)本書凝聚了兩位筆者在Red
付磊 搜狐視頻工程師,主要負(fù)責(zé)設(shè)計(jì)開發(fā)搜狐視頻平臺(tái)中間件,為上百個(gè)業(yè)務(wù)和應(yīng)用提供緩存存儲(chǔ)服務(wù),每天調(diào)用量達(dá)1000億 ,涉及服務(wù)器上百臺(tái),跨三個(gè)IDC,作為項(xiàng)目發(fā)起人,負(fù)責(zé)架構(gòu)實(shí)現(xiàn)和主要模塊編寫。
序 言
前 言
致 謝
第1章 初識(shí)Redis 1
1.1 盛贊Redis 1
1.2 Redis特性 2
1.3 Redis使用場(chǎng)景 5
1.3.1 Redis可以做什么 5
1.3.2 Redis不可以做什么 5
1.4 用好Redis的建議 6
1.5 正確安裝并啟動(dòng)Redis 6
1.5.1 安裝Redis 7
1.5.2 配置、啟動(dòng)、操作、關(guān)閉Redis 8
1.6 Redis重大版本 11
1.7 本章重點(diǎn)回顧 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 典型使用場(chǎng)景 28
2.3 哈希 31
2.3.1 命令 32
2.3.2 內(nèi)部編碼 35
2.3.3 使用場(chǎng)景 36
2.4 列表 38
2.4.1 命令 38
2.4.2 內(nèi)部編碼 43
2.4.3 使用場(chǎng)景 44
2.5 集合 46
2.5.1 命令 46
2.5.2 內(nèi)部編碼 50
2.5.3 使用場(chǎng)景 51
2.6 有序集合 52
2.6.1 命令 53
2.6.2 內(nèi)部編碼 59
2.6.3 使用場(chǎng)景 59
2.7 鍵管理 60
2.7.1 單個(gè)鍵管理 60
2.7.2 遍歷鍵 67
2.7.3 數(shù)據(jù)庫管理 70
2.8 本章重點(diǎn)回顧 73
第3章 小功能大用處 74
3.1 慢查詢分析 74
3.1.1 慢查詢的兩個(gè)配置參數(shù) 75
3.1.2 最佳實(shí)踐 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 性能測(cè)試 85
3.3.3 原生批量命令與Pipeline對(duì)比 86
3.3.4 最佳實(shí)踐 87
3.4 事務(wù)與Lua 87
3.4.1 事務(wù) 87
3.4.2 Lua用法簡(jiǎn)述 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 使用場(chǎng)景 108
3.8 GEO 109
3.9 本章重點(diǎn)回顧 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)計(jì)片段 145
4.5 客戶端常見異常 146
4.6 客戶端案例分析 149
4.6.1 Redis內(nèi)存陡增 149
4.6.2 客戶端周期性的超時(shí) 151
4.7 本章重點(diǎn)回顧 153
第5章 持久化 154
5.1 RDB 154
5.1.1 觸發(fā)機(jī)制 154
5.1.2 流程說明 155
5.1.3 RDB文件的處理 156
5.1.4 RDB的優(yōu)缺點(diǎn) 156
5.2 AOF 157
5.2.1 使用AOF 157
5.2.2 命令寫入 157
5.2.3 文件同步 158
5.2.4 重寫機(jī)制 159
5.2.5 重啟加載 161
5.2.6 文件校驗(yàn) 162
5.3 問題定位與優(yōu)化 162
5.3.1 fork操作 162
5.3.2 子進(jìn)程開銷監(jiān)控和優(yōu)化 163
5.3.3 AOF追加阻塞 165
5.4 多實(shí)例部署 166
5.5 本章重點(diǎn)回顧 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 拓?fù)? 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ā)與運(yùn)維中的問題 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 本章重點(diǎn)回顧 188
第7章 Redis的噩夢(mèng):阻塞 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競(jìng)爭(zhēng) 195
7.3.2 內(nèi)存交換 195
7.3.3 網(wǎng)絡(luò)問題 196
7.4 本章重點(diǎn)回顧 199
第8章 理解內(nèi)存 200
8.1 內(nèi)存消耗 200
8.1.1 內(nèi)存使用統(tǒng)計(jì) 200
8.1.2 內(nèi)存消耗劃分 201
8.1.3 子進(jìn)程內(nèi)存消耗 203
8.2 內(nèi)存管理 204
8.2.1 設(shè)置內(nèi)存上限 204
8.2.2 動(dòng)態(tài)調(diào)整內(nèi)存上限 204
8.2.3 內(nèi)存回收策略 205
8.3 內(nèi)存優(yōu)化 209
8.3.1 redisObject對(duì)象 209
8.3.2 縮減鍵值對(duì)象 210
8.3.3 共享對(duì)象池 211
8.3.4 字符串優(yōu)化 213
8.3.5 編碼優(yōu)化 216
8.3.6 控制鍵的數(shù)量 223
8.4 本章重點(diǎn)回顧 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 部署拓?fù)浣Y(jié)構(gòu) 232
9.2.2 部署Redis數(shù)據(jù)節(jié)點(diǎn) 233
9.2.3 部署Sentinel節(jié)點(diǎn) 234
9.2.4 配置優(yōu)化 236
9.2.5 部署技巧 243
9.3 API