编辑推荐
当你需要以接近实时的速度访问快速变动的数据流时,Redis这样的键值数据库就是你的极好选择。通过接纳散列、字符串、列表等多种数据类型,Redis对键值对模式进行了扩展,它既提供了极其快速的内存数据集操作,又可以在运行时轻松地将这些数据持久化到磁盘上面。除此之外,Redis还是免费的、开源的。
本书对Redis本身以及它的键值对模型进行了介绍,读者将接触到包括缓存、分布式广告定向等实际使用案例,学到如何从小型的作业任务开始,扩展Redis以适应大规模的数据集,以及如何与其他传统的关系数据库或是其他NoSQL存储系统进行集成。有经验的开发者应该会对集群和服务器脚本编程等较为深入的内容感兴趣。
内容简介
本书深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍。
本书一共由三个部分组成。首部分对Redis进行了介绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Redis去构建文章展示网站、cookie、购物车、网页缓存、数据库行缓存等一系列程序。第二部分对Redis命令进行了更详细的介绍,并展示了如何使用Redis去构建更为复杂的辅助工具和应用程序,并在结尾展示了如何使用Redis去构建一个简单的社交网站。第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。
目录
- 第一部分 入门
- 第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