Redis 实战

Redis 实战
编辑推荐
当你需要以接近实时的速度访问快速变动的数据流时,Redis 这样的键值数据库就是你的极好选择。通过接纳散列、字符串、列表等多种数据类型,Redis 对键值对模式进行了扩展,它既提供了极其快速的内存数据集操作,又可以在运行时轻松地将这些数据持久化到磁盘上面。除此之外,Redis 还是免费的、开源的。
本书对 Redis 本身以及它的键值对模型进行了介绍,读者将接触到包括缓存、分布式广告定向等实际使用案例,学到如何从小型的作业任务开始,扩展 Redis 以适应大规模的数据集,以及如何与其他传统的关系数据库或是其他 NoSQL 存储系统进行集成。有经验的开发者应该会对集群和服务器脚本编程等较为深入的内容感兴趣。
本书主要内容
全面介绍 Redis
预处理实时数据
管理内存数据集
发布 / 订阅及配置
持久化到磁盘
本书面向熟悉数据库概念的开发者。阅读本书既不要求读者预先了解 NoSQL 数据库概念,也不要求读者有任何 Redis 使用经验。本书也适合具备编程能力的系统管理员阅读。
要下载本书代码可以访问 manning.com/RedisinAction。
内容简介
本书深入浅出地介绍了 Redis 的 5 种数据类型,并通过多个实用示例展示了 Redis 的用法。除此之外,书中还讲述了 Redis 的优化方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍。
本书一共由三个部分组成。首部分对 Redis 进行了介绍,说明了 Redis 的基本使用方法、它拥有的 5 种数据结构以及操作这 5 种数据结构的命令,并讲解了如何使用 Redis 去构建文章展示网站、cookie、购物车、网页缓存、数据库行缓存等一系列程序。第二部分对 Redis 命令进行了更详细的介绍,并展示了如何使用 Redis 去构建更为复杂的辅助工具和应用程序,并在结尾展示了如何使用 Redis 去构建一个简单的社交网站。第三部分对 Redis 用户经常会遇到的一些问题进行了介绍,讲解了降低 Redis 内存占用的方法、扩展 Redis 性能的方法以及使用 Lua 语言进行脚本编程的方法。
作者简介
作者介绍
Josiah L. Carlson 博士,既是一位经验丰富的数据库专家,也是一位活跃的 Redis 社区贡献者。
译者简介
黄健宏(huangz),男,1990 年出生,目前是程序员、技术图书作者和译者。著有《Redis 设计与实现》,翻译了《Redis 命令参考》《Disque 使用教程》等技术文档。想要了解更多关于黄健宏的信息,请访问他的个人网站 huangz.me
目录
第一部分 入门
第 1 章 初识 Redis 2
- 1.1 Redis 简介 3
- 1.1.1 Redis 与其他数据库和软件的对比 3
- 1.1.2 附加特性 4
- 1.1.3 使用 Redis 的理由 5
- 1.2 Redis 数据结构简介 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 对文章进行投票 15
- 1.3.2 发布并获取文章 17
- 1.3.3 对文章进行分组 19
- 1.4 寻求帮助 21
- 1.5 小结 21
第 2 章 使用 Redis 构建 Web 应用 23
- 2.1 登录和 cookie 缓存 24
- 2.2 使用 Redis 实现购物车 28
- 2.3 网页缓存 29
- 2.4 数据行缓存 30
- 2.5 网页分析 33
- 2.6 小结 34
第二部分 核心概念
第 3 章 Redis 命令 38
- 3.1 字符串 39
- 3.2 列表 42
- 3.3 集合 44
- 3.4 散列 46
- 3.5 有序集合 48
- 3.6 发布与订阅 52
- 3.7 其他命令 54
- 3.7.1 排序 54
- 3.7.2 基本的 Redis 事务 56
- 3.7.3 键的过期时间 58
- 3.8 小结 60
第 4 章 数据安全与性能保障 61
- 4.1 持久化选项 61
- 4.1.1 快照持久化 62
- 4.1.2 AOF 持久化 66
- 4.1.3 重写 / 压缩 AOF 文件 67
- 4.2 复制 68
- 4.2.1 配置 Redis 的配置选项 69
- 4.2.2 Redis 复制的启动过程 70
- 4.2.3 主从链 71
- 4.2.4 检验磁盘写入 72
- 4.3 处理系统故障 73
- 4.3.1 验证快照文件和 AOF 文件 74
- 4.3.2 更换故障主服务器 75
- 4.4 Redis 事务 76
- 4.4.1 定义用户信息和用户包裹 77
- 4.4.2 将物品放到市场上销售 78
- 4.4.3 购买物品 80
- 4.5 非事务型流水线 82
- 4.6 关于性能方面的注意事项 85
- 4.7 小结 87
第 5 章 使用 Redis 构建支持程序 88
- 5.1 使用 Redis 来记录日志 88
- 5.1.1 最新日志 89
- 5.1.2 常见日志 90
- 5.2 计数器和统计数据 91
- 5.2.1 将计数器存储到 Redis 里面 91
- 5.2.2 使用 Redis 存储统计数据 96
- 5.2.3 简化统计数据的记录与发现 98
- 5.3 查找 IP 所属城市以及国家 100
- 5.3.1 载入位置表格 100
- 5.3.2 查找 IP 所属城市 102
- 5.4 服务的发现与配置 103
- 5.4.1 使用 Redis 存储配置信息 103
- 5.4.2 为每个应用程序组件分别配置一个 Redis 服务器 104
- 5.4.3 自动 Redis 连接管理 106
- 5.5 小结 107
第 6 章 使用 Redis 构建应用程序组件 109
- 6.1 自动补全 109
- 6.1.1 自动补全最近联系人 110
- 6.1.2 通讯录自动补全 112
- 6.2 分布式锁 115
- 6.2.1 锁的重要性 116
- 6.2.2 简易锁 118
- 6.2.3 使用 Redis 构建锁 119
- 6.2.4 细粒度锁 122
- 6.2.5 带有超时限制特性的锁 124
- 6.3 计数信号量 126
- 6.3.1 构建基本的计数信号量 126
- 6.3.2 公平信号量 128
- 6.3.3 刷新信号量 131
- 6.3.4 消除竞争条件 132
- 6.4 任务队列 133
- 6.4.1 先进先出队列 133
- 6.4.2 延迟任务 136
- 6.5 消息拉取 139
- 6.5.1 单接收者消息的发送与订阅替代品 140
- 6.5.2 多接收者消息的发送与订阅替代品 141
- 6.6 使用 Redis 进行文件分发 145
- 6.6.1 根据地理位置聚合用户数据 146
- 6.6.2 发送日志文件 148
- 6.6.3 接收日志文件 149
- 6.6.4 处理日志文件 150
- 6.7 小结 152
第 7 章 基于搜索的应用程序 153
- 7.1 使用 Redis 进行搜索 153
- 7.1.1 基本搜索原理 154
- 7.1.2 对搜索结果进行排序 160
- 7.2 有序索引 162
- 7.2.1 使用有序集合对搜索结果进行排序 162
- 7.2.2 使用有序集合实现非数值排序 164
- 7.3 广告定向 166
- 7.3.1 什么是广告服务器? 167
- 7.3.2 对广告进行索引 167
- 7.3.3 执行广告定向操作 170
- 7.3.4 从用户行为中学习 174
- 7.4 职位搜索 180
- 7.4.1 逐个查找合适的职位 180
- 7.4.2 以搜索方式查找合适的职位 181
- 7.5 小结 182
第 8 章 构建简单的社交网站 184
- 8.1 用户和状态 185
- 8.1.1 用户信息 185
- 8.1.2 状态消息 186
- 8.2 主页时间线 187
- 8.3 关注者列表和正在关注列表 188
- 8.4 状态消息的发布与删除 191
- 8.5 流 API 194
- 8.5.1 流 API 提供的数据 195
- 8.5.2 提供数据 196
- 8.5.3 对流消息进行过滤 199
- 8.6 小结 205
第三部分 进阶内容
第 9 章 降低内存占用 208
- 9.1 短结构 208
- 9.1.1 压缩列表表示 209
- 9.1.2 集合的整数集合编码 211
- 9.1.3 长压缩列表和大整数集合带来的性能问题 212
- 9.2 分片结构 214
- 9.2.1 分片式散列 215
- 9.2.2 分片集合 218
- 9.3 打包存储二进制位和字节 221
- 9.3.1 决定被存储位置信息的格式 221
- 9.3.2 存储打包后的数据 223
- 9.3.3 对分片字符串进行聚合计算 224
- 9.4 小结 226
第 10 章 扩展 Redis 227
- 10.1 扩展读性能 227
- 10.2 扩展写性能和内存容量 230
- 10.2.1 处理分片配置信息 232
- 10.2.2 创建分片服务器连接装饰器 233
- 10.3 扩展复杂的查询 234
- 10.3.1 扩展搜索查询量 235
- 10.3.2 扩展搜索索引大小 235
- 10.3.3 对社交网站进行扩展 240
- 10.4 小结 247
第 11 章 Redis 的 Lua 脚本编程 248
-
11.1 在不编写 C 代码的情况下添加新功能 248
-
11.1.1 将 Lua 脚本载入 Redis 249
-
11.1.2 创建新的状态消息 251
-
11.2 使用 Lua 重写锁和信号量 254
-
11.2.1 使用 Lua 实现锁的原因 254
-
11.2.2 重写锁实现 255
-
11.2.3 使用 Lua 实现计数信号量 257
-
11.3 移除 WATCH/MULTI/EXEC 事务 258
-
11.3.1 回顾群组自动补全程序 259
-
11.3.2 再次对物品买卖市场进行改进 261
-
11.4 使用 Lua 对列表进行分片 263
-
11.4.1 分片列表的构成 263
-
11.4.2 将元素推入分片列表 265
-
11.4.3 从分片里面里面弹出元素 266
-
11.4.4 对分片列表执行阻塞弹出操作 267
-
11.5 小结 270
-
附录 A 快速安装指南 271
-
附录 B 其他资源和参考资料 279