Redis 使用手冊
內容描述
本書系統化介紹Redis命令及其應用場景,內容深入,圖文並茂,巨細靡遺,是掌握Redis的案頭必備參考書。本書主要分為三大部分,共20章。第一部分介紹Redis最核心的九種數據結構,列舉了操作這些數據結構的眾多命令及其詳細信息,並在其中穿插介紹了多個使用 Redis 命令構建應用程序的示例。通過這些程序示例,讀者可以進一步加深對命令的認識,並學會如何在實際中應用這些命令,從而達到學以致用的目的。第二部分介紹Redis在數據結構的基礎上為用戶提供的額外功能,其中包括數據庫管理、自動過期功能、流水線與事務、Lua 腳本、持久化、發布與訂閱、模塊管理等,讀者可以通過閱讀這一部分學會如何將 Redis 應用在更多場景中。第三部分介紹 Redis 的三項多機功能:復制、Sentinel 和集群。讀者可以通過閱讀這一部分來獲得擴展 Redis 讀寫性能的相關知識,並根據自己的情況為 Redis 系統選擇合適的擴展方式。
Redis 是當今內存數據庫方面的事實標準,它擁有豐富的數據結構和強大的功能,適用於各種不同的開發場景。 本書由資深 Redis 專家撰寫,包含大量 Redis 命令介紹以及 Redis 使用示例,無論你是剛開始接觸 Redis 的初學者,還是每天都需要操作 Redis 的使用者,本書對你都會有所幫助。
本書要點:
對 180 多個 Redis 命令進行了詳細且深入的介紹,並提供了相應的執行示例和參考信息,無論是學習新命令還是回顧已知命令的用法,都會非常方便。
展示了緩存、鎖、計數器、隊列、分頁、唯一計數器、社交關系、自動補全、消息隊列、廣播系統等數十個實際可用的 Redis 應用程序的實現方法,幫助讀者學習如何將 Redis 應用到實際開發中。
內容涵蓋最新 Redis 版本,幫助讀者將 HyperLogLog、位圖、地理位置、集群、流、模塊等新特性的相關知識全部收入囊中。
所有章節均經過精心設計和編排,既可以在學習 Redis 時用作教程,又可以在使用 Redis 的過程中用作參考。
圖文並茂,通過豐富的圖示和詳細的例子來展示 Redis 的關鍵技術,讓知識不再枯燥難懂。
目錄大綱
前言
第1章引言1
1.1 Redis簡介1
1.2內容編排3
1.3目標讀者4
1.4預備工作4
1.5執行命令5
1.6配置服務器6
1.7示例代碼7
1.8版本說明7
1.9讀者服務網站8
1.10啟程8
第一部分數據結構與應用
第2章字符串10
2.1 SET:為字符串鍵設置值11
2.1.1改變覆蓋規則12
2.1.2其他信息13
2.2 GET:獲取字符串鍵的值13
2.3 GETSET:獲取舊值並設置新值14
示例:緩存14
示例:鎖16
2.4 MSET:一次為多個字符串鍵設置值18
2.5 MGET:一次獲取多個字符串鍵的值19
2.6 MSETNX:只在鍵不存在的情況下,一次為多個字符串鍵設置值20
示例:存儲文章信息20
2.7 STRLEN:獲取字符串值的字節長度25
2.8字符串值的索引26
2.9 GETRANGE:獲取字符串值指定索引範圍上的內容26
2.10 SETRANGE:對字符串值的指定索引範圍進行設置27
2.10.1自動擴展被修改的字符串29
2.10.2在值裡面填充空字節29
2.10.3其他信息30
示例:給文章存儲程序加上文章長度計數功能和文章預覽功能31
2.11 APPEND:追加新內容到值的末尾32
2.11.1處理不存在的鍵33
2.11.2其他信息33
示例:存儲日誌34
2.12使用字符串鍵存儲數字值37
2.13 INCRBY、DECRBY:對整數值執行加法操作和減法操作37
2.13.1類型限制38
2.13.2處理不存在的鍵39
2.13.3其他信息40
2.14 INCR、DECR:對整數值執行加1操作和減1操作40
2.15 INCRBYFLOAT:對數字值執行浮點數加法操作41
2.15.1處理不存在的鍵41
2.15.2使用INCRBYFLOAT執行浮點數減法操作41
2.15 .3 INCRBYFLOAT與整數值42
2.15.4小數位長度限制43
2.15.5其他信息43
示例:ID生成器43
示例:計數器44
示例:限速器46
2.16重點回顧48
第3章散列49
3.1散列簡介50
3.2 HSET:為字段設置值51
3.2.1使用新值覆蓋舊值53
3.2.2其他信息53
3.3 HSETNX:只在字段不存在的情況下為它設置值53
3.4 HGET:獲取字段的值54
3.4.1處理不存在的字段或者不存在的散列55
3.4.2其他信息55
示例:實現短網址生成程序55
3.5 HINCRBY:對字段存儲的整數值執行加法或減法操作58
3.5.1執行減法操作58
3.5.2處理異常情況59
3.5.3其他信息59
3.6 HINCRBYFLOAT:對字段存儲的數字值執行浮點數加法或減法操作59
3.6.1增量和字段值的類型限制60
3.6.2執行減法操作60
3.6.3其他信息60
示例:使用散列鍵重新實現計數器60
3.7 HSTRLEN:獲取字段值的字節長度63
3.8 HEXISTS:檢查字段是否存在63
3.9 HDEL:刪除字段64
3.10 HLEN:獲取散列包含的字段數量65
示例:實現用戶登錄會話66
3.11 HMSET:一次為多個字段設置值69
3.11.1使用新值覆蓋舊值69
3.11.2其他信息70
3.12 HMGET:一次獲取多個字段的值70
3.13 HKEYS、HVALS、HGETALL:獲取所有字段、所有值、所有字段和值71
3.13.1字段在散列中的排列順序72
3.13.2其他信息73
示例:存儲圖數據73
示例:使用散列鍵重新實現文章存儲程序77
3.14散列與字符串79
3.14.1散列鍵的優點80
3.14.2字符串鍵的優點81
3.14.3字符串鍵和散列鍵的選擇82
3.15重點回顧82
第4章列表83
4.1 LPUSH:將元素推入列表左端84
4.1.1一次推入多個元素84
4.1.2其他信息86
4.2 RPUSH:將元素推入列表右端86
4.2.1一次推入多個元素86
4.2.2其他信息88
4.3 LPUSHX、RPUSHX:只對已存在的列表執行推入操作88
4.3.1每次只能推入單個元素89
4.3.2其他信息90
4.4 LPOP:彈出列表最左端的元素90
4.5 RPOP:彈出列表最右端的元素91
4.6 RPOPLPUSH:將右端彈出的元素推入左端92
4.6.1源列表和目標列表相同93
4.6.2處理空列表94
4.6.3其他信息95
示例:先進先出隊列95
4.7 LLEN:獲取列表的長度96
4.8 LINDEX:獲取指定索引上的元素97
4.8.1處理超出範圍的索引98
4.8.2其他信息98
4.9 LRANGE:獲取指定索引範圍上的元素98
4.9.1獲取列表包含的所有元素99
4.9.2處理超出範圍的索引100
4.9.3其他信息101
示例:分頁101
4.10 LSET:為指定索引設置新元素103
4.10.1處理超出範圍的索引104
4.10.2其他信息104
4.11 LINSERT:將元素插入列表104
4.11.1處理不存在的元素105
4.11.2其他信息105
4.12 LTRIM:修剪列表105
4.12.1處理負數索引107
4.12.2其他信息107
4.13 LREM:從列表中移除指定元素107
示例:待辦事項列表109
4.14 BLPOP:阻塞式左端彈出操作112
4.14.1解除阻塞狀態112
4.14.2處理空列表113
4.14.3列表名的作用114
4.14.4阻塞效果的範圍114
4.14.5其他信息114
4.15 BRPOP:阻塞式右端彈出操作114
4.16 BRPOPLPUSH:阻塞式彈出並推入操作114
4.16.1處理源列表為空的情況116
4.16.2其他信息116
示例:帶有阻塞功能的消息隊列116
4.17重點回顧119
第5章集合120
5.1 SADD:將元素添加到集合121
5.1.1忽略已存在元素122
5.1.2其他信息122
5.2 SREM:從集合中移除元素122
5.2.1忽略不存在的元素122
5.2.2其他信息123
5.3 SMOVE:將元素從一個集合移動到另一個集合123
5.3.1忽略不存在的元素124
5.3.2覆蓋已存在的元素124
5.3 .3其他信息125
5.4 SMEMBERS:獲取集合包含的所有元素125
5.4.1元素的無序排列126
5.4.2其他信息126
5.5 SCARD:獲取集合包含的元素數量126
5.6 SISMEMBER:檢查給定元素是否存在於集合127
示例:唯一計數器128
示例:打標籤129
示例:點贊131
示例:投票132
示例:社交關係135
5.7 SRANDMEMBER:隨機獲取集合中的元素137
5.7.1返回指定數量的元素138
5.7.2其他信息139
5.8 SPOP:隨機地從集合中移除指定數量的元素139
5.8.1 SPOP與SRANDMEMBER的區別140
5.8.2其他信息141
示例:抽獎141
5.9 SINTER、SINTERSTORE:對集合執行交集計算142
5.9.1 SINTERSTORE命令143
5.9.2其他信息143
5.10 SUNION、SUNIONSTORE:對集合執行並集計算143
5.10.1 SUNIONSTORE命令144
5.10.2其他信息144
5.11 SDIFF、SDIFFSTORE:對集合執行差集計算144
5.11 .1 SDIFFSTORE命令145
5.11.2其他信息145
示例:共同關注與推薦關注146
示例:使用反向索引構建商品篩選器149
5.12重點回顧152
第6章有序集合153
6.1 ZADD:添加或更新成員154
6.1 .1更新已有成員的分值154
6.1.2指定要執行的操作154
6.1.3返回被修改成員的數量155
6.1.4其他信息156
6.2 ZREM:移除指定的成員156
6.2.1忽略不存在的成員157
6.2.2其他信息157
6.3 ZSCORE:獲取成員的分值157
6.4 ZINCRBY:對成員的分值執行自增或自減操作158
6.4 .1執行自減操作159
6.4.2處理不存在的鍵或者不存在的成員160
6.4.3其他信息160
6.5 ZCARD:獲取有序集合的大小160
6.6 ZRANK、ZREVRANK:獲取成員在有序集合中的排名161
6.6.1處理不存在的鍵或者不存在的成員162
6.6.2其他信息162
6.7 ZRANGE、ZREVRANGE:獲取指定索引範圍內的成員162
6.7.1使用負數索引163
6.7.2獲取成員及其分值164
6.7.3處理不存在的有序集合165
6.7.4其他信息165
示例:排行榜165
6.8 ZRANGEBYSCORE、ZREVRAN-GEBYSCORE:獲取指定分值範圍內的成員167
6.8.1獲取成員及其分值168
6.8.2限制命令返回的成員數量168
6.8.3使用開區間分值範圍169
6.8.4使用無限值作為範圍170
6.8.5其他信息171
6.9 ZCOUNT:統計指定分值範圍內的成員數量171
6.9.1分值範圍的格式171
6.9.2其他信息172
示例:時間線172
6.10 ZREMRANGEBYRANK :移除指定排名範圍內的成員175
6.10.1使用負數排名175
6.10.2其他信息175
6.11 ZREMRANGEBYSCORE:移除指定分值範圍內的成員176
6.12 ZUNIONSTORE、ZINTERSTORE:有序集合的並集運算和交集運算176
6.12.1指定聚合函數177
6.12.2設置權重179
6.12.3使用集合作為輸入180
6.12.4其他信息181
示例:商品推薦181
6.13 ZRANGEBYLEX、ZREVRAN-GEBYLEX:返回指定字典序範圍內的成員182
6.13.1 ZREVRANGEBYLEX 184
6.13.2限制命令返回的成員數量184
6.13.3其他信息185
6.14 ZLEXCOUNT:統計位於字典序指定範圍內的成員數量185
6.15 ZREMRANGEBYLEX:移除位於字典序指定範圍內的成員186
示例:自動補全187
6.16 ZPOPMAX、ZPOPMIN:彈出分值最高和最低的成員188
6.17 BZPOPMAX、BZPOPMIN:阻塞式最大/最小元素彈出操作189
6.18重點回顧191
第7章HyperLogLog 192
7.1 HyperLogLog簡介193
7.2 PFADD:對集合元素進行計數193
7.3 PFCOUNT:返回集合的近似基數194
7.3.1返回並集的近似基數194
7.3.2其他信息195
示例:優化唯一計數器195
示例:檢測重複信息196
7.4 PFMERGE:計算多個HyperLogLog的並集198
7.4.1 PFCOUNT與PFMERGE 198
7.4.2其他信息199
示例:實現每週/月度/年度計數器199
7.5重點回顧200
第8章位圖201
8.1 SETBIT:設置二進制位的值201
8.1.1位圖的擴展202
8.1.2偏移量只能為正數203
8.1.3其他信息203
8.2 GETBIT:獲取二進制位的值203
8.2.1處理範圍之外的偏移量204
8.2.2其他信息204
8.3 BITCOUNT:統計被設置的二進制位數量204
8.3.1只統計位圖指定字節範圍內的二進制位204
8.3.2使用負數偏移量定義統計範圍206
8.3.3其他信息206
示例:用戶行為記錄器207
8.4 BITPOS:查找第一個指定的二進制位值208
8.4.1只在指定的字節範圍內進行查找209
8.4.2使用負數偏移量定義查找範圍209
8.4.3邊界情況處理210
8.4.4其他信息211
8.5 BITOP:執行二進制位運算211
8.5.1處理不同長度的位圖212
8.5 .2其他信息212
示例:0-1矩陣212
8.6 BITFIELD:在位圖中存儲整數值214
8.6.1根據偏移量對區域進行設置214
8.6.2根據索引對區域進行設置216
8.6.3獲取區域存儲的值216
8.6.4執行加法操作或減法操作217
8.6.5處理溢出218
8.6.6使用位圖存儲整數的原因219
8.6.7其他信息219
示例:緊湊計數器219
8.7使用字符串命令對位圖進行操作221
8.8重點回顧222
第9章地理坐標223
9.1 GEOADD:存儲坐標224
9.1 .1更新已有位置的坐標224
9.1.2其他信息224
9.2 GEOPOS:獲取指定位置的坐標224
9.3 GEODIST:計算兩個位置之間的直線距離225
9.3.1指定距離的單位225
9.3.2處理不存在的位置226
9.3.3其他信息226
示例:具有基本功能的用戶地理位置程序226
9.4 GEORADIUS:查找指定坐標半徑範圍內的其他位置228
9.4.1返回被匹配位置與中心點之間的距離229
9.4 .2返回被匹配位置的坐標229
9.4.3排序查找結果230
9.4.4限制命令獲取的位置數量231
9.4.5同時使用多個可選項231
9.4.6其他信息232
9.5 GEORADIUSBYMEMBER:查找指定位置半徑範圍內的其他位置232
示例:查找附近用戶233
9.6 GEOHASH:獲取指定位置的Geohash值235
9.6.1在進行範圍查找時獲取Geohash值235
9.6.2其他信息236
9.7使用有序集合命令操作GEO數據236
9.8重點回顧237
第10章流238
10.1 XADD:追加新元素到流的末尾239
10.1.1流元素的ID 239
10.1.2不完整的流ID 240
10.1.3流元素ID的限制240
10.1.4自動生成元素ID 241
10.1.5限制流的長度242
10.1.6其他信息243
10.2 XTRIM:對流進行修剪243
10.3 XDEL:移除指定元素244
10.4 XLEN:獲取流包含的元素數量244
10.5 XRANGE、XREVRANGE:訪問流中元素245
10.5.1獲取ID指定的單個元素245
10.5.2獲取指定ID範圍內的多個元素246
10.5.3獲取所有元素247
10.5.4獲取指定數量的元素248
10.5.5對流進行迭代249
10.5.6以逆序訪問流中元素251
10.5.7其他信息251
10.6 XREAD:以阻塞或非阻塞方式獲取流元素251
10.6.1從多個流中獲取大於指定ID的元素251
10.6.2迭代流253
10.6.3阻塞254
10.6.4只獲取新出現的元素256
10.6.5其他信息258
示例:消息隊列258
10.7消費者組260
10.7.1創建消費者組261
10.7.2讀取消費者組262
10.7.3消費者262
10.7.4消息的狀態轉換263
10.7.5實際示例263
10.8 XGROUP:管理消費者組264
10.8.1創建消費者組264
10.8.2修改消費者組的最後遞送消息ID 265
10.8.3刪除消費者267
10.8.4刪除消費者組268
10.9 XREADGROUP:讀取消費者組中的消息268
10.9.1讀取未遞送過的新消息269
10.9.2其他信息270
10.10 XPENDING:顯示待處理消息的相關信息270
10.11 XACK:將消息標記為“已處理” 271
10.12 XCLAIM:轉移消息的歸屬權272
10.12.1只返回被轉移消息的ID 273
10.12.2其他信息273
10.13 XINFO:查看流和消費者組的相關信息273
10.13.1打印消費者信息273
10.13.2打印消費者組信息274
10.13.3打印流消息274
10.13.4其他信息275
示例:為消息隊列提供消費者組功能275
10.14重點回顧277
第二部分附加功能
第11章數據庫280
11.1 SELECT:切換至指定的數據庫281
11.2 KEYS:獲取所有與給定匹配符相匹配的鍵282
11.2.1全局匹配符282
11.2.2其他信息283
11.3 SCAN:以漸進方式迭代數據庫中的鍵283
11.3.1一次簡單的迭代示例284
11.3.2 SCAN命令的迭代保證285
11.3.3游標的使用285
11.3.4迭代與給定匹配符相匹配的鍵285
11.3.5指定返回鍵的期望數量286
11.3.6數據結構迭代命令287
11.3.7其他信息289
示例:構建數據庫迭代器289
11.4 RANDOMKEY:隨機返回一個鍵292
11.5 SORT:對鍵的值進行排序292
11.5.1指定排序方式293
11.5.2對字符串值進行排序294
11.5. 3只獲取部分排序結果294
11.5.4獲取外部鍵的值作為結果295
11.5.5使用外部鍵的值作為排序權重298
11.5.6保存排序結果299
11.5.7其他信息300
11.6 EXISTS:檢查給定鍵是否存在300
11.6.1只能接受單個鍵的EXISTS命令300
11.6.2其他信息300
11.7 DBSIZE:獲取數據庫包含的鍵值對數量301
11.8 TYPE:查看鍵的類型301
示例:數據庫取樣程序302
11.9 RENAME、 RENAMENX:修改鍵名304
11.9.1覆蓋已存在的鍵305
11.9.2只在新鍵名尚未被佔用的情況下進行改名305
11.9.3其他信息306
11.10 MOVE:將給定的鍵移動到另一個數據庫306
11.10.1不覆蓋同名鍵306
11.10.2其他信息307
11.11 DEL:移除指定的鍵307
11.12 UNLINK:以異步方式移除指定的鍵307
11.13 FLUSHDB:清空當前數據庫308
11.13.1 async選項308
11.13.2其他信息309
11.14 FLUSHALL:清空所有數據庫309
11.14.1 async選項309
11.14.2其他信息309
11.15 SWAPDB:互換數據庫309
示例:使用SWAPDB命令實行在線替換數據庫310
11.16重點回顧312
第12章自動過期313
12.1 EXPIRE、PEXPIRE:設置生存時間313
12.1.1更新鍵的生存時間315
12.1.2其他信息315
示例:帶有自動移除特性的緩存程序316
12.2 SET命令的EX選項和PX選項317
12.2.1組合命令的安全問題317
12.2.2其他信息318
示例:帶有自動釋放特性的鎖318
12.3 EXPIREAT、PEXPIREAT:設置過期時間319
12.3.1 EXPIREAT使用示例320
12.3.2 PEXPIREAT使用示例320
12.3.3更新鍵的過期時間321
12.3.4自動過期特性的不足之處321
12.3.5其他信息322
12.4 TTL、PTTL:獲取鍵的剩餘生存時間322
12.4.1沒有剩餘生存時間的鍵和不存在的鍵322
12.4.2 TTL命令的精度問題322
12.4.3其他信息323
示例:自動過期的登錄會話323
示例:自動淘汰冷門數據326
12.5重點回顧328
第13章流水線與事務329
13.1流水線329
示例:使用流水線優化隨機鍵創建程序331
13.2事務333
13.2.1 MULTI:開啟事務335
13.2.2 EXEC:執行事務335
13.2.3 DISCARD:放棄事務336
13.2. 4事務的安全性337
13.2.5事務對服務器的影響337
13.2.6流水線與事務337
示例:實現mlpop()函數338
13.3帶有樂觀鎖的事務339
13.3.1 WATCH:對鍵進行監視341
13.3.2 UNWATCH:取消對鍵的監視342
示例:帶有身份驗證功能的鎖343
示例:帶有身份驗證功能的計數信號量344
13.4重點回顧347
第14章Lua腳本348
14.1 EVAL:執行腳本349
14.1.1使用腳本執行Redis命令349
14.1.2值轉換350
14.1.3全局變量保護352
14.1.4在腳本中切換數據庫353
14.1.5腳本的原子性353
14.1. 6以命令行方式執行腳本353
14.1.7其他信息354
示例:使用腳本重新實現帶有身份驗證功能的鎖354
示例:實現LPOPRPUSH命令355
14.2 SCRIPT LOAD和EVALSHA:緩存並執行腳本357
14.3腳本管理359
14.3 .1 SCRIPT EXISTS:檢查腳本是否已被緩存359
14.3.2 SCRIPT FLUSH:移除所有已緩存腳本359
14.3.3 SCRIPT KILL:強制停止正在運行的腳本360
14.4內置函數庫361
14.4.1 redis包362
14.4.2 bit包364
14.4.3 struct包364
14.4.4 cjson包365
14.4.5 cmsgpack包365
14.5腳本調試366
14.5.1一個簡單的調試示例366
14.5.2調試命令368
14.5.3斷點369
14.5 .4動態斷點371
14.5.5輸出調試日誌372
14.5.6執行指定的代碼或命令373
14.5.7顯示調用鏈373
14.5.8重載腳本375
14.5.9調試模式376
14.5.10終止調試會話378
14.6重點回顧379
第15章持久化380
15.1 RDB持久化380
15.1.1 SAVE:阻塞服務器並創建RDB文件381
15.1.2 BGSAVE:以非阻塞方式創建RDB文件382
15.1.3通過配置選項自動創建RDB文件382
15.1.4 SAVE命令和BGSAVE命令的選擇384
15.1.5 RDB文件結構384
15.1.6載入RDB文件386
15.1.7數據丟失387
15.2 AOF持久化389
15.2.1打開AOF持久化功能390
15.2.2設置AOF文件的沖洗頻率391
15.2.3 AOF重寫391
15.2.4 AOF持久化的優缺點394
15.3 RDB-AOF混合持久化394
15.4同時使用RDB持久化和AOF持久化396
15.5無持久化397
15.6 SHUTDOWN:關閉服務器397
15.6.1通過可選項指示持久化操作398
15.6.2其他信息399
15.7重點回顧399
第16章發布與訂閱400
16.1 PUBLISH:向頻道發送消息402
16.2 SUBSCRIBE:訂閱頻道402
16.2.1接收頻道消息403
16.2.2其他信息404
16.3 UNSUBSCRIBE:退訂頻道404
16.3.1 UNSUBSCRIBE命令在不同客戶端中的應用404
16.3.2其他信息405
16.4 PSUBSCRIBE:訂閱模式405
16.4.1接收模式消息406
16.4.2其他信息407
16.5 PUNSUBSCRIBE:退訂模式407
16.5.1 PUNSUBSCRIBE命令在不同客戶端中的應用407
16.5.2其他信息408
16.6 PUBSUB:查看發布與訂閱的相關信息408
16.6.1查看被訂閱的頻道408
16.6.2查看頻道的訂閱者數量409
16.6.3查看被訂閱模式的總數量409
16.6.4其他信息409
示例:廣播系統409
16.7重點回顧411
第17章模塊412
17.1模塊的管理413
17.1.1編譯模塊413
17.1. 2載入模塊413
17.1.3列出已載入的模塊414
17.1.4卸載模塊415
17.2 ReJSON模塊416
17.2.1編譯和載入416
17.2.2使用示例417
17.2.3 ReJSON路徑418
17.2.4 API簡介420
17.3 RediSQL模塊423
17.3.1編譯模塊423
17.3.2使用示例424
17.3.3 API簡介425
17.4 RediSearch模塊428
17.4.1下載與編譯428
17.4.2使用示例429
17.4.3 API簡介430
17.5重點回顧442
第三部分多機功能
第18章複製444
18.1 REPLICAOF:將服務器設置為從服務器446
18.1. 1通過配置選項設置從服務器447
18.1.2取消複製447
18.1.3其他信息448
18.2 ROLE:查看服務器的角色448
18.2.1主服務器執行ROLE命令448
18.2.2從服務器執行ROLE命令449
18.2.3其他信息449
18.3數據同步449
18.3.1完整同步450
18.3.2在線更新450
18.3.3部分同步451
18.4無須硬盤的複制452
18.5降低數據不一致情況出現的概率452
18.6可寫的從服務器453
示例:使用從服務器處理複雜計算操作454
18.7腳本複制455
18.7.1腳本傳播模式455
18.7.2命令傳播模式456
18.7.3選擇性命令傳播457
18.7.4模式的選擇458
18.8重點回顧459
第19章Sentinel 460
19.1啟動Sentinel 461
19.2 Sentinel網絡464
19.3 Sentinel管理命令466
19.3.1 SENTINEL masters:獲取所有被監視主服務器的信息467
19.3.2 SENTINEL master:獲取指定被監視主服務器的信息468
19.3.3 SENTINEL slaves:獲取被監視主服務器的從服務器信息469
19.3.4 SENTINEL sentinels:獲取其他Sentinel的相關信息471
19.3.5 SENTINEL get-master-addr-by-name:獲取給定主服務器的IP地址和端口號472
19.3.6 SENTINEL reset:重置主服務器狀態473
19.3.7 SENTINEL failover:強制執行故障轉移473
19.3.8 SENTINEL ckquorum:檢查可用Sentinel的數量474
19.3.9 SENTINEL flushconfig:強制寫入配置文件474
19.4在線配置Sentinel 475
19.4.1 SENTINEL monitor:監視給定主服務器475
19.4.2 SENTINEL remove:取消對給定主服務器的監視476
19.4.3 SENTINEL set:修改Sentinel配置選項的值477
19.4.4使用在線配置命令的注意事項478
示例:使用redis-py管理Sentinel 479
19.5重點回顧479
第20章集群481
20.1基本特性481
20.1.1複製與高可用481
20.1.2分片與重分片482
20.1.3高性能482
20.1.4簡單易用483
20.2搭建集群483
20.2.1快速搭建集群483
20.2.2手動搭建集群486
示例:使用客戶端連接集群489
20.3散列標籤491
20.4打開/關閉從節點的讀命令執行權限492
20.4.1 READONLY:打開讀命令執行權限493
20.4.2 READWRITE:關閉讀命令執行權限493
20.4.3其他信息494
20.5集群管理工具redis-cli 494
20.5.1創建集群495
20.5.2查看集群信息496
20.5.3檢查集群497
20.5.4修復槽錯誤498
20.5.5重分片499
20.5.6負載均衡501
20.5.7添加節點502
20.5.8移除節點503
20.5.9執行命令504
20.5.10設置超時時間504
20.5.11導入數據505
20.6集群管理命令506
20.6.1 CLUSTER MEET:將節點添加至集群506
20.6.2 CLUSTER NODES:查看集群內所有節點的相關信息508
20.6.3 CLUSTER MYID:查看當前節點的運行ID 511
20.6.4 CLUSTER INFO:查看集群信息512
20.6.5 CLUSTER FORGET:從集群中移除節點513
20.6.6 CLUSTER REPLICATE:將節點變為從節點514
20.6.7 CLUSTER REPLICAS:查看給定節點的所有從節點515
20.6.8 CLUSTER FAILOVER:強制執行故障轉移516
20.6.9 CLUSTER RESET:重置節點517
20.7槽管理命令518
20.7.1 CLUSTER SLOTS:查看槽與節點之間的關聯信息519
20.7.2 CLUSTER ADDSLOTS:把槽指派給節點520
20.7.3 CLUSTER DELSLOTS:撤銷對節點的槽指派521
20.7.4 CLUSTER FLUSHSLOTS:撤銷對節點的所有槽指派522
20.7.5 CLUSTER KEYSLOT:查看鍵所屬的槽523
20.7.6 CLUSTER COUNTKEYSINSLOT:查看槽包含的鍵數量524
20.7.7 CLUSTER GETKEYSINSLOT:獲取槽包含的鍵524
20.7.8 CLUSTER SETSLOT:改變槽的狀態525
20.8重點回顧527
附錄A Redis安裝方法528
附錄B redis-py安裝方法531
附錄C Redis命令索引表533