本書深入淺出地介紹了Redis的5種數(shù)據(jù)類型,并通過多個(gè)實(shí)用示例展示了Redis的用法。除此之外,書中還講述了Redis的優(yōu)化方法以及擴(kuò)展方法,是一本對(duì)于學(xué)習(xí)和使用 Redis 來說不可多得的參考書籍。
本書一共由三個(gè)部分組成。首部分對(duì)Redis進(jìn)行了介紹,說明了Redis的基本使用方法、它擁有的5種數(shù)據(jù)結(jié)構(gòu)以及操作這5種數(shù)據(jù)結(jié)構(gòu)的命令,并講解了如何使用Redis去構(gòu)建文章展示網(wǎng)站、cookie、購物車、網(wǎng)頁緩存、數(shù)據(jù)庫行緩存等一系列程序。第二部分對(duì)Redis命令進(jìn)行了更詳細(xì)的介紹,并展示了如何使用Redis去構(gòu)建更為復(fù)雜的輔助工具和應(yīng)用程序,并在結(jié)尾展示了如何使用Redis去構(gòu)建一個(gè)簡(jiǎn)單的社交網(wǎng)站。第三部分對(duì)Redis用戶經(jīng)常會(huì)遇到的一些問題進(jìn)行了介紹,講解了降低Redis內(nèi)存占用的方法、擴(kuò)展Redis性能的方法以及使用Lua語言進(jìn)行腳本編程的方法。
當(dāng)你需要以接近實(shí)時(shí)的速度訪問快速變動(dòng)的數(shù)據(jù)流時(shí),Redis這樣的鍵值數(shù)據(jù)庫就是你的極好選擇。通過接納散列、字符串、列表等多種數(shù)據(jù)類型,Redis對(duì)鍵值對(duì)模式進(jìn)行了擴(kuò)展,它既提供了極其快速的內(nèi)存數(shù)據(jù)集操作,又可以在運(yùn)行時(shí)輕松地將這些數(shù)據(jù)持久化到磁盤上面。除此之外,Redis還是免費(fèi)的、開源的。 本書對(duì)Redis本身以及它的鍵值對(duì)模型進(jìn)行了介紹,讀者將接觸到包括緩存、分布式廣告定向等實(shí)際使用案例,學(xué)到如何從小型的作業(yè)任務(wù)開始,擴(kuò)展Redis以適應(yīng)大規(guī)模的數(shù)據(jù)集,以及如何與其他傳統(tǒng)的關(guān)系數(shù)據(jù)庫或是其他NoSQL存儲(chǔ)系統(tǒng)進(jìn)行集成。有經(jīng)驗(yàn)的開發(fā)者應(yīng)該會(huì)對(duì)集群和服務(wù)器腳本編程等較為深入的內(nèi)容感興趣。 本書主要內(nèi)容 全面介紹Redis 預(yù)處理實(shí)時(shí)數(shù)據(jù) 管理內(nèi)存數(shù)據(jù)集 發(fā)布/訂閱及配置 持久化到磁盤 本書面向熟悉數(shù)據(jù)庫概念的開發(fā)者。閱讀本書既不要求讀者預(yù)先了解NoSQL數(shù)據(jù)庫概念,也不要求讀者有任何Redis使用經(jīng)驗(yàn)。本書也適合具備編程能力的系統(tǒng)管理員閱讀! ∫螺d本書代碼可以訪問manning.com/RedisinAction。
作者介紹
Josiah L. Carlson博士既是一位經(jīng)驗(yàn)豐富的數(shù)據(jù)庫專家,也是一位活躍的Redis社區(qū)貢獻(xiàn)者。
譯者簡(jiǎn)介
黃健宏(huangz),男,1990年出生,目前是程序員、技術(shù)圖書作者和譯者。著有《Redis設(shè)計(jì)與實(shí)現(xiàn)》,翻譯了《Redis命令參考》《Disque使用教程》等技術(shù)文檔。想要了解更多關(guān)于黃健宏的信息,請(qǐng)?jiān)L問他的個(gè)人網(wǎng)站huangz.me。
目錄
第一部分 入門
第1章 初識(shí)Redis 2
1.1 Redis簡(jiǎn)介 3
1.1.1 Redis與其他數(shù)據(jù)庫和軟件的對(duì)比 3
1.1.2 附加特性 4
1.1.3 使用Redis的理由 5
1.2 Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介 6
1.2.1 Redis中的字符串 7
1.2.2 Redis中的列表 9
1.2.3 Redis的集合 10
1.2.4 Redis的散列 11
1.2.5 Redis的有序集合 12
1.3 你好Redis 13
1.3.1 對(duì)文章進(jìn)行投票 15
1.3.2 發(fā)布并獲取文章 17
1.3.3 對(duì)文章進(jìn)行分組 19
1.4 尋求幫助 21
1.5 小結(jié) 21
第2章 使用Redis構(gòu)建Web應(yīng)用 23
2.1 登錄和cookie緩存 24
2.2 使用Redis實(shí)現(xiàn)購物車 28
2.3 網(wǎng)頁緩存 29
2.4 數(shù)據(jù)行緩存 30
2.5 網(wǎng)頁分析 33
2.6 小結(jié) 34
第二部分 核心概念
第3章 Redis命令 38
3.1 字符串 39
3.2 列表 42
3.3 集合 44
3.4 散列 46
3.5 有序集合 48
3.6 發(fā)布與訂閱 52
3.7 其他命令 54
3.7.1 排序 54
3.7.2 基本的Redis事務(wù) 56
3.7.3 鍵的過期時(shí)間 58
3.8 小結(jié) 60
第4章 數(shù)據(jù)安全與性能保障 61
4.1 持久化選項(xiàng) 61
4.1.1 快照持久化 62
4.1.2 AOF持久化 66
4.1.3 重寫/壓縮AOF文件 67
4.2 復(fù)制 68
4.2.1 配置Redis的配置選項(xiàng) 69
4.2.2 Redis復(fù)制的啟動(dòng)過程 70
4.2.3 主從鏈 71
4.2.4 檢驗(yàn)磁盤寫入 72
4.3 處理系統(tǒng)故障 73
4.3.1 驗(yàn)證快照文件和AOF文件 74
4.3.2 更換故障主服務(wù)器 75
4.4 Redis事務(wù) 76
4.4.1 定義用戶信息和用戶包裹 77
4.4.2 將物品放到市場(chǎng)上銷售 78
4.4.3 購買物品 80
4.5 非事務(wù)型流水線 82
4.6 關(guān)于性能方面的注意事項(xiàng) 85
4.7 小結(jié) 87
第5章 使用Redis構(gòu)建支持程序 88
5.1 使用Redis來記錄日志 88
5.1.1 **日志 89
5.1.2 常見日志 90
5.2 計(jì)數(shù)器和統(tǒng)計(jì)數(shù)據(jù) 91
5.2.1 將計(jì)數(shù)器存儲(chǔ)到Redis里面 91
5.2.2 使用Redis存儲(chǔ)統(tǒng)計(jì)數(shù)據(jù) 96
5.2.3 簡(jiǎn)化統(tǒng)計(jì)數(shù)據(jù)的記錄與發(fā)現(xiàn) 98
5.3 查找IP所屬城市以及國(guó)家 100
5.3.1 載入位置表格 100
5.3.2 查找IP所屬城市 102
5.4 服務(wù)的發(fā)現(xiàn)與配置 103
5.4.1 使用Redis存儲(chǔ)配置信息 103
5.4.2 為每個(gè)應(yīng)用程序組件分別配置一個(gè)Redis服務(wù)器 104
5.4.3 自動(dòng)Redis連接管理 106
5.5 小結(jié) 107
第6章 使用Redis構(gòu)建應(yīng)用程序組件 109
6.1 自動(dòng)補(bǔ)全 109
6.1.1 自動(dòng)補(bǔ)全*近聯(lián)系人 110
6.1.2 通訊錄自動(dòng)補(bǔ)全 112
6.2 分布式鎖 115
6.2.1 鎖的重要性 116
6.2.2 簡(jiǎn)易鎖 118
6.2.3 使用Redis構(gòu)建鎖 119
6.2.4 細(xì)粒度鎖 122
6.2.5 帶有超時(shí)限制特性的鎖 124
6.3 計(jì)數(shù)信號(hào)量 126
6.3.1 構(gòu)建基本的計(jì)數(shù)信號(hào)量 126
6.3.2 公平信號(hào)量 128
6.3.3 刷新信號(hào)量 131
6.3.4 消除競(jìng)爭(zhēng)條件 132
6.4 任務(wù)隊(duì)列 133
6.4.1 先進(jìn)先出隊(duì)列 133
6.4.2 延遲任務(wù) 136
6.5 消息拉取 139
6.5.1 單接收者消息的發(fā)送與訂閱替代品 140
6.5.2 多接收者消息的發(fā)送與訂閱替代品 141
6.6 使用Redis進(jìn)行文件分發(fā) 145
6.6.1 根據(jù)地理位置聚合用戶數(shù)據(jù) 146
6.6.2 發(fā)送日志文件 148
6.6.3 接收日志文件 149
6.6.4 處理日志文件 150
6.7 小結(jié) 152
第7章 基于搜索的應(yīng)用程序 153
7.1 使用Redis進(jìn)行搜索 153
7.1.1 基本搜索原理 154
7.1.2 對(duì)搜索結(jié)果進(jìn)行排序 160
7.2 有序索引 162
7.2.1 使用有序集合對(duì)搜索結(jié)果進(jìn)行排序 162
7.2.2 使用有序集合實(shí)現(xiàn)非數(shù)值排序 164
7.3 廣告定向 166
7.3.1 什么是廣告服務(wù)器? 167
7.3.2 對(duì)廣告進(jìn)行索引 167
7.3.3 執(zhí)行廣告定向操作 170
7.3.4 從用戶行為中學(xué)習(xí) 174
7.4 職位搜索 180
7.4.1 逐個(gè)查找合適的職位 180
7.4.2 以搜索方式查找合適的職位 181
7.5 小結(jié) 182
第8章 構(gòu)建簡(jiǎn)單的社交網(wǎng)站 184
8.1 用戶和狀態(tài) 185
8.1.1 用戶信息 185
8.1.2 狀態(tài)消息 186
8.2 主頁時(shí)間線 187
8.3 關(guān)注者列表和正在關(guān)注列表 188
8.4 狀態(tài)消息的發(fā)布與刪除 191
8.5 流API 194
8.5.1 流API提供的數(shù)據(jù) 195
8.5.2 提供數(shù)據(jù) 196
8.5.3 對(duì)流消息進(jìn)行過濾 199
8.6 小結(jié) 205
第三部分 進(jìn)階內(nèi)容
第9章 降低內(nèi)存占用 208
9.1 短結(jié)構(gòu) 208
9.1.1 壓縮列表表示 209
9.1.2 集合的整數(shù)集合編碼 211
9.1.3 長(zhǎng)壓縮列表和大整數(shù)集合帶來的性能問題 212
9.2 分片結(jié)構(gòu) 214
9.2.1 分片式散列 215
9.2.2 分片集合 218
9.3 打包存儲(chǔ)二進(jìn)制位和字節(jié) 221
9.3.1 決定被存儲(chǔ)位置信息的格式 221
9.3.2 存儲(chǔ)打包后的數(shù)據(jù) 223
9.3.3 對(duì)分片字符串進(jìn)行聚合計(jì)算 224
9.4 小結(jié) 226
第10章 擴(kuò)展Redis 227
10.1 擴(kuò)展讀性能 227
10.2 擴(kuò)展寫性能和內(nèi)存容量 230
10.2.1 處理分片配置信息 232
10.2.2 創(chuàng)建分片服務(wù)器連接裝飾器 233
10.3 擴(kuò)展復(fù)雜的查詢 234
10.3.1 擴(kuò)展搜索查詢量 235
10.3.2 擴(kuò)展搜索索引大小 235
10.3.3 對(duì)社交網(wǎng)站進(jìn)行擴(kuò)展 240
10.4 小結(jié) 247
第11章 Redis的Lua腳本編程 248
11.1 在不編寫C代碼的情況下添加新功能 248
11.1.1 將Lua腳本載入Redis 249
11.1.2 創(chuàng)建新的狀態(tài)消息 251
11.2 使用Lua重寫鎖和信號(hào)量 254
11.2.1 使用Lua實(shí)現(xiàn)鎖的原因 254
11.2.2 重寫鎖實(shí)現(xiàn) 255
11.2.3 使用Lua實(shí)現(xiàn)計(jì)數(shù)信號(hào)量 257
11.3 移除WATCH/MULTI/EXEC事務(wù) 258
11.3.1 回顧群組自動(dòng)補(bǔ)全程序 259
11.3.2 再次對(duì)物品買賣市場(chǎng)進(jìn)行改進(jìn) 261
11.4 使用Lua對(duì)列表進(jìn)行分片 263
11.4.1 分片列表的構(gòu)成 263
11.4.2 將元素推入分片列表 265
11.4.3 從分片里面里面彈出元素 266
11.4.4 對(duì)分片列表執(zhí)行阻塞彈出操作 267
11.5 小結(jié) 270
附錄A 快速安裝指南 271
附錄B 其他資源和參考資料 279
要構(gòu)建一個(gè)文章投票網(wǎng)站,我們首先要做的就是為了這個(gè)網(wǎng)站設(shè)置一些數(shù)值和限制條件:如果一篇文章獲得了至少200張支持票(up vote),那么網(wǎng)站就認(rèn)為這篇文章是一篇有趣的文章;假如這個(gè)網(wǎng)站每天發(fā)布1000篇文章,而其中的50篇符合網(wǎng)站對(duì)有趣文章的要求,那么網(wǎng)站要做的就是把這50篇文章放到文章列表前100位至少一天;另外,這個(gè)網(wǎng)站暫時(shí)不提供投反對(duì)票(down.vote)的功能。
為了產(chǎn)生一個(gè)能夠隨著時(shí)間流逝而不斷減少的評(píng)分,程序需要根據(jù)文章的發(fā)布時(shí)間和當(dāng)前時(shí)間來計(jì)算文章的評(píng)分,具體的計(jì)算方法為:將文章得到的支持票數(shù)量乘以一個(gè)常數(shù),然后加上文章的發(fā)布時(shí)間,得出的結(jié)果就是文章的評(píng)分。
我們使用從UTC時(shí)區(qū)1970年1月1日到現(xiàn)在為止經(jīng)過的秒數(shù)來計(jì)算文章的評(píng)分,這個(gè)值通常被稱為Unix時(shí)間。之所以選擇使用Unix時(shí)間,是因?yàn)樵谒心軌蜻\(yùn)行Redis的平臺(tái)上面,使用編程語言獲取這個(gè)值都是一件非常簡(jiǎn)單的事情。另外,計(jì)算評(píng)分時(shí)與支持票數(shù)量相乘的常量為432,這個(gè)常量是通過將一天的秒數(shù)(86400)除以文章展示一天所需的支持票數(shù)量(200)得出的:文章每獲得一張支持票,程序就需要將文章的評(píng)分增加432分。
……