描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111557975丛书名: 数据库技术丛书
产品特色
编辑推荐
内容简介
本书主要讲解Redis基本功能及其应用,以及线上开发与运维监控中的实际使用案例,包含大规模集群开发与管理的场景、应用案例与开发技巧,并总结了实际开发中遇到的“坑”。本书不要求读者有任何Redis使用经验,对入门与进阶DevOps的开发者提供有价值的帮助。主要内容包括:Redis的安装配置、API、客户端、持久化、复制、高可用、集群、缓存设计等基本功能,Redis高可用集群解决方案,Redis设计和使用的问题,开发运维中的陷阱,CacheCloud私有云的开发案例等。
目 录
序 言
前 言
致 谢
第1章 初识Redis 1
1.1 盛赞Redis 1
1.2 Redis特性 2
1.3 Redis使用场景 5
1.3.1 Redis可以做什么 5
1.3.2 Redis不可以做什么 5
1.4 用好Redis的建议 6
1.5 正确安装并启动Redis 6
1.5.1 安装Redis 7
1.5.2 配置、启动、操作、关闭Redis 8
1.6 Redis重大版本 11
1.7 本章重点回顾 14
第2章 API的理解和使用 15
2.1 预备 15
2.1.1 全局命令 15
2.1.2 数据结构和内部编码 18
2.1.3 单线程架构 19
2.2 字符串 21
2.2.1 命令 22
2.2.2 内部编码 27
2.2.3 典型使用场景 28
2.3 哈希 31
2.3.1 命令 32
2.3.2 内部编码 35
2.3.3 使用场景 36
2.4 列表 38
2.4.1 命令 38
2.4.2 内部编码 43
2.4.3 使用场景 44
2.5 集合 46
2.5.1 命令 46
2.5.2 内部编码 50
2.5.3 使用场景 51
2.6 有序集合 52
2.6.1 命令 53
2.6.2 内部编码 59
2.6.3 使用场景 59
2.7 键管理 60
2.7.1 单个键管理 60
2.7.2 遍历键 67
2.7.3 数据库管理 70
2.8 本章重点回顾 73
第3章 小功能大用处 74
3.1 慢查询分析 74
3.1.1 慢查询的两个配置参数 75
3.1.2 实践 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 性能测试 85
3.3.3 原生批量命令与Pipeline对比 86
3.3.4 实践 87
3.4 事务与Lua 87
3.4.1 事务 87
3.4.2 Lua用法简述 90
3.4.3 Redis与Lua 92
3.4.4 案例 94
3.4.5 Redis如何管理Lua脚本 96
3.5 Bitmaps 98
3.5.1 数据结构模型 98
3.5.2 命令 98
3.5.3 Bitmaps分析 101
3.6 HyperLogLog 102
3.7 发布订阅 105
3.7.1 命令 106
3.7.2 使用场景 108
3.8 GEO 109
3.9 本章重点回顾 112
第4章 客户端 113
4.1 客户端通信协议 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 客户端相关配置 145
4.4.3 客户端统计片段 145
4.5 客户端常见异常 146
4.6 客户端案例分析 149
4.6.1 Redis内存陡增 149
4.6.2 客户端周期性的超时 151
4.7 本章重点回顾 153
第5章 持久化 154
5.1 RDB 154
5.1.1 触发机制 154
5.1.2 流程说明 155
5.1.3 RDB文件的处理 156
5.1.4 RDB的优缺点 156
5.2 AOF 157
5.2.1 使用AOF 157
5.2.2 命令写入 157
5.2.3 文件同步 158
5.2.4 重写机制 159
5.2.5 重启加载 161
5.2.6 文件校验 162
5.3 问题定位与优化 162
5.3.1 fork操作 162
5.3.2 子进程开销监控和优化 163
5.3.3 AOF追加阻塞 165
5.4 多实例部署 166
5.5 本章重点回顾 167
第6章 复制 168
6.1 配置 168
6.1.1 建立复制 168
6.1.2 断开复制 170
6.1.3 安全性 170
6.1.4 只读 170
6.1.5 传输延迟 171
6.2 拓扑 171
6.3 原理 172
6.3.1 复制过程 172
6.3.2 数据同步 175
6.3.3 全量复制 178
6.3.4 部分复制 181
6.3.5 心跳 183
6.3.6 异步复制 184
6.4 开发与运维中的问题 184
6.4.1 读写分离 184
6.4.2 主从配置不一致 186
6.4.3 规避全量复制 186
6.4.4 规避复制风暴 187
6.5 本章重点回顾 188
第7章 Redis的噩梦:阻塞 189
7.1 发现阻塞 189
7.2 内在原因 191
7.2.1 API或数据结构使用不合理 191
7.2.2 CPU饱和 193
7.2.3 持久化阻塞 194
7.3 外在原因 195
7.3.1 CPU竞争 195
7.3.2 内存交换 195
7.3.3 网络问题 196
7.4 本章重点回顾 199
第8章 理解内存 200
8.1 内存消耗 200
8.1.1 内存使用统计 200
8.1.2 内存消耗划分 201
8.1.3 子进程内存消耗 203
8.2 内存管理 204
8.2.1 设置内存上限 204
8.2.2 动态调整内存上限 204
8.2.3 内存回收策略 205
8.3 内存优化 209
8.3.1 redisObject对象 209
8.3.2 缩减键值对象 210
8.3.3 共享对象池 211
8.3.4 字符串优化 213
8.3.5 编码优化 216
8.3.6 控制键的数量 223
8.4 本章重点回顾 225
第9章 哨兵 226
9.1 基本概念 226
9.1.1 主从复制的问题 227
9.1.2 高可用 227
9.1.3 Redis Sentinel的高可用性 229
9.2 安装和部署 232
9.2.1 部署拓扑结构 232
9.2.2 部署Redis数据节点 233
9.2.3 部署Sentinel节点 234
9.2.4 配置优化 236
9.2.5 部署技巧 243
9.3 API
前 言
致 谢
第1章 初识Redis 1
1.1 盛赞Redis 1
1.2 Redis特性 2
1.3 Redis使用场景 5
1.3.1 Redis可以做什么 5
1.3.2 Redis不可以做什么 5
1.4 用好Redis的建议 6
1.5 正确安装并启动Redis 6
1.5.1 安装Redis 7
1.5.2 配置、启动、操作、关闭Redis 8
1.6 Redis重大版本 11
1.7 本章重点回顾 14
第2章 API的理解和使用 15
2.1 预备 15
2.1.1 全局命令 15
2.1.2 数据结构和内部编码 18
2.1.3 单线程架构 19
2.2 字符串 21
2.2.1 命令 22
2.2.2 内部编码 27
2.2.3 典型使用场景 28
2.3 哈希 31
2.3.1 命令 32
2.3.2 内部编码 35
2.3.3 使用场景 36
2.4 列表 38
2.4.1 命令 38
2.4.2 内部编码 43
2.4.3 使用场景 44
2.5 集合 46
2.5.1 命令 46
2.5.2 内部编码 50
2.5.3 使用场景 51
2.6 有序集合 52
2.6.1 命令 53
2.6.2 内部编码 59
2.6.3 使用场景 59
2.7 键管理 60
2.7.1 单个键管理 60
2.7.2 遍历键 67
2.7.3 数据库管理 70
2.8 本章重点回顾 73
第3章 小功能大用处 74
3.1 慢查询分析 74
3.1.1 慢查询的两个配置参数 75
3.1.2 实践 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 性能测试 85
3.3.3 原生批量命令与Pipeline对比 86
3.3.4 实践 87
3.4 事务与Lua 87
3.4.1 事务 87
3.4.2 Lua用法简述 90
3.4.3 Redis与Lua 92
3.4.4 案例 94
3.4.5 Redis如何管理Lua脚本 96
3.5 Bitmaps 98
3.5.1 数据结构模型 98
3.5.2 命令 98
3.5.3 Bitmaps分析 101
3.6 HyperLogLog 102
3.7 发布订阅 105
3.7.1 命令 106
3.7.2 使用场景 108
3.8 GEO 109
3.9 本章重点回顾 112
第4章 客户端 113
4.1 客户端通信协议 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 客户端相关配置 145
4.4.3 客户端统计片段 145
4.5 客户端常见异常 146
4.6 客户端案例分析 149
4.6.1 Redis内存陡增 149
4.6.2 客户端周期性的超时 151
4.7 本章重点回顾 153
第5章 持久化 154
5.1 RDB 154
5.1.1 触发机制 154
5.1.2 流程说明 155
5.1.3 RDB文件的处理 156
5.1.4 RDB的优缺点 156
5.2 AOF 157
5.2.1 使用AOF 157
5.2.2 命令写入 157
5.2.3 文件同步 158
5.2.4 重写机制 159
5.2.5 重启加载 161
5.2.6 文件校验 162
5.3 问题定位与优化 162
5.3.1 fork操作 162
5.3.2 子进程开销监控和优化 163
5.3.3 AOF追加阻塞 165
5.4 多实例部署 166
5.5 本章重点回顾 167
第6章 复制 168
6.1 配置 168
6.1.1 建立复制 168
6.1.2 断开复制 170
6.1.3 安全性 170
6.1.4 只读 170
6.1.5 传输延迟 171
6.2 拓扑 171
6.3 原理 172
6.3.1 复制过程 172
6.3.2 数据同步 175
6.3.3 全量复制 178
6.3.4 部分复制 181
6.3.5 心跳 183
6.3.6 异步复制 184
6.4 开发与运维中的问题 184
6.4.1 读写分离 184
6.4.2 主从配置不一致 186
6.4.3 规避全量复制 186
6.4.4 规避复制风暴 187
6.5 本章重点回顾 188
第7章 Redis的噩梦:阻塞 189
7.1 发现阻塞 189
7.2 内在原因 191
7.2.1 API或数据结构使用不合理 191
7.2.2 CPU饱和 193
7.2.3 持久化阻塞 194
7.3 外在原因 195
7.3.1 CPU竞争 195
7.3.2 内存交换 195
7.3.3 网络问题 196
7.4 本章重点回顾 199
第8章 理解内存 200
8.1 内存消耗 200
8.1.1 内存使用统计 200
8.1.2 内存消耗划分 201
8.1.3 子进程内存消耗 203
8.2 内存管理 204
8.2.1 设置内存上限 204
8.2.2 动态调整内存上限 204
8.2.3 内存回收策略 205
8.3 内存优化 209
8.3.1 redisObject对象 209
8.3.2 缩减键值对象 210
8.3.3 共享对象池 211
8.3.4 字符串优化 213
8.3.5 编码优化 216
8.3.6 控制键的数量 223
8.4 本章重点回顾 225
第9章 哨兵 226
9.1 基本概念 226
9.1.1 主从复制的问题 227
9.1.2 高可用 227
9.1.3 Redis Sentinel的高可用性 229
9.2 安装和部署 232
9.2.1 部署拓扑结构 232
9.2.2 部署Redis数据节点 233
9.2.3 部署Sentinel节点 234
9.2.4 配置优化 236
9.2.5 部署技巧 243
9.3 API
前 言
前 言?IntroductionRedis作为基于键值对的NoSQL数据库,具有高性能、丰富的数据结构、持久化、高可用、分布式等特性,同时Redis本身非常稳定,已经得到业界的广泛认可和使用。掌握Redis已经逐步成为开发和运维人员的技能之一。
本书关注了Redis开发运维的方方面面,尤其对于开发运维中如何提高效率、减少可能遇到的问题进行详细分析,但本书不单单介绍怎么解决这些问题,而是通过对Redis重要原理的解析,帮助开发运维人员学会找到问题的方法,以及理解背后的原理,从而让开发运维人员不仅知其然,而且知其所以然。
本书涵盖内容第1章 初识Redis,带领读者进入Redis的世界,了解它的前世今生、众多特性、应用场景、安装配置、简单使用,后对Redis发展过程中的重要版本进行说明,可以让读者对Redis有一个全面的认识。
第2章 API的理解和使用,全面介绍了Redis提供的5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的数据模型、常用命令、典型应用场景,并且每个小节都会给出在Redis开发过程可能要注意的坑和技巧。同时本章还会对Redis的单线程处理机制、键值管理做一个全面介绍,通过对这些原理的理解,读者可以在合适的应用场景选择合适的数据结构和命令进行开发,有效提高程序效率,降低可能产生的问题和隐患。
第3章 小功能大用处,除了5种数据结构外,Redis还提供了诸如慢查询、Redis Shell、Pipeline、Lua脚本、Bitmaps、HyperLogLog、发布订阅、GEO等附加功能,在这些功能的帮助下,Redis的应用场景更加丰富。
第4章 客户端,本章重点关注Redis客户端的开发,介绍了Redis的客户端通信协议、详细讲解了Java客户端Jedis的使用技巧,同时通过从原理角度剖析在开发运维中,客户端的监控和管理技巧,后给出客户端开发中常见问题以及案例讲解。
第5章 持久化,Redis的持久化功能有效避免因进程退出造成的数据丢失问题,本章首先介绍RDB和AOF两种持久化配置和运行流程,其次对常见的持久化问题进行定位和优化,后结合Redis常见的单机多实例部署场景进行优化。
第6章 复制,在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,用于故障恢复和负载均衡等需求,Redis也是如此。它为我们提供了复制(replication)功能,实现了多个相同数据的Redis副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用。
第7章 Redis的噩梦:阻塞,Redis是典型的单线程架构,所有的读写操作都在一条主线程中完成的。当Redis用于高并发场景时这条线程就变成了它的生命线。如果出现阻塞哪怕是很短时间对于我们的应用来说都是噩梦。导致阻塞问题的场景大致分为内在原因和外在原因,本章将进行详细分析。
第8章 理解内存,Redis所有的数据存在于内存中,如何高效利用Redis内存变得非常重要。高效利用Redis内存首先需要理解Redis内存消耗在哪里,如何管理内存,后再深入到如何优化内存。掌握这些知识后相信读者能够实现用更少的内存存储更多的数据从而降低成本。
第9章 哨兵,Redis从2.8版本开始正式提供了Redis Sentinel,它有效解决了主从复制模式下故障转移的若干问题,为Redis提供了高可用功能。本章将一步步解析Redis Sentinel的相关概念、安装部署、配置、命令使用、原理解析,后分析了Redis Sentinel运维中的一些问题。
第10章 集群,是本书的重头戏,Redis Cluster是Redis 3提供的Redis分布式解决方案,有效解决了Redis分布式方面的需求,理解应用好Redis Cluster将极大的解放我们对分布式Redis的需求,同时它也是学习分布式存储的绝佳案例。本章将针对RedisCluster的数据分布,搭建集群,节点通信,请求路由,集群伸缩,故障转移等方面进行分析说明。
第11章 缓存设计,缓存能够有效加速应用的读写速度,以及降低后端负载,对于开发人员进行日常应用的开发至关重要,但是将缓存加入应用架构后也会带来一些问题,本章将介绍缓存使用和设计中遇到的问题,具体包括:缓存的收益和成本、缓存更新策略、缓存粒度控制、穿透问题优化、无底洞问题优化、雪崩问题优化、热点key优化。
第12章 开发运维的“陷阱”,介绍Redis开发运维中的一些棘手问题,具体包括:Linux配置优化、flush误操作数据恢复、如何让Redis变得安全、bigkey问题、热点key问题。
第13章 Redis监控运维云平台CacheCloud,介绍笔者所在团队开源的Redis运维工具CacheCloud,它有效解决了Redis监控和运维中的一些问题,本章将按照快速部署、机器部署、接入应用、用户功能、运维功能多个维度全面的介绍CacheCloud,相信在它的帮助下,读者可以更好的监控和运维好Redis。
第14章 Redis配置统计字典,会对Redis的系统状态信息以及全部配置做一个全面的梳理,希望本章能够成为Redis配置统计字典,协助大家分析和解决日常开发和运维中遇到的问题。
目标读者本书深入浅出地介绍了Redis相关知识,因此可以作为Redis新手的入门教程,同时本书凝聚了两位笔者在Red
本书关注了Redis开发运维的方方面面,尤其对于开发运维中如何提高效率、减少可能遇到的问题进行详细分析,但本书不单单介绍怎么解决这些问题,而是通过对Redis重要原理的解析,帮助开发运维人员学会找到问题的方法,以及理解背后的原理,从而让开发运维人员不仅知其然,而且知其所以然。
本书涵盖内容第1章 初识Redis,带领读者进入Redis的世界,了解它的前世今生、众多特性、应用场景、安装配置、简单使用,后对Redis发展过程中的重要版本进行说明,可以让读者对Redis有一个全面的认识。
第2章 API的理解和使用,全面介绍了Redis提供的5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的数据模型、常用命令、典型应用场景,并且每个小节都会给出在Redis开发过程可能要注意的坑和技巧。同时本章还会对Redis的单线程处理机制、键值管理做一个全面介绍,通过对这些原理的理解,读者可以在合适的应用场景选择合适的数据结构和命令进行开发,有效提高程序效率,降低可能产生的问题和隐患。
第3章 小功能大用处,除了5种数据结构外,Redis还提供了诸如慢查询、Redis Shell、Pipeline、Lua脚本、Bitmaps、HyperLogLog、发布订阅、GEO等附加功能,在这些功能的帮助下,Redis的应用场景更加丰富。
第4章 客户端,本章重点关注Redis客户端的开发,介绍了Redis的客户端通信协议、详细讲解了Java客户端Jedis的使用技巧,同时通过从原理角度剖析在开发运维中,客户端的监控和管理技巧,后给出客户端开发中常见问题以及案例讲解。
第5章 持久化,Redis的持久化功能有效避免因进程退出造成的数据丢失问题,本章首先介绍RDB和AOF两种持久化配置和运行流程,其次对常见的持久化问题进行定位和优化,后结合Redis常见的单机多实例部署场景进行优化。
第6章 复制,在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,用于故障恢复和负载均衡等需求,Redis也是如此。它为我们提供了复制(replication)功能,实现了多个相同数据的Redis副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用。
第7章 Redis的噩梦:阻塞,Redis是典型的单线程架构,所有的读写操作都在一条主线程中完成的。当Redis用于高并发场景时这条线程就变成了它的生命线。如果出现阻塞哪怕是很短时间对于我们的应用来说都是噩梦。导致阻塞问题的场景大致分为内在原因和外在原因,本章将进行详细分析。
第8章 理解内存,Redis所有的数据存在于内存中,如何高效利用Redis内存变得非常重要。高效利用Redis内存首先需要理解Redis内存消耗在哪里,如何管理内存,后再深入到如何优化内存。掌握这些知识后相信读者能够实现用更少的内存存储更多的数据从而降低成本。
第9章 哨兵,Redis从2.8版本开始正式提供了Redis Sentinel,它有效解决了主从复制模式下故障转移的若干问题,为Redis提供了高可用功能。本章将一步步解析Redis Sentinel的相关概念、安装部署、配置、命令使用、原理解析,后分析了Redis Sentinel运维中的一些问题。
第10章 集群,是本书的重头戏,Redis Cluster是Redis 3提供的Redis分布式解决方案,有效解决了Redis分布式方面的需求,理解应用好Redis Cluster将极大的解放我们对分布式Redis的需求,同时它也是学习分布式存储的绝佳案例。本章将针对RedisCluster的数据分布,搭建集群,节点通信,请求路由,集群伸缩,故障转移等方面进行分析说明。
第11章 缓存设计,缓存能够有效加速应用的读写速度,以及降低后端负载,对于开发人员进行日常应用的开发至关重要,但是将缓存加入应用架构后也会带来一些问题,本章将介绍缓存使用和设计中遇到的问题,具体包括:缓存的收益和成本、缓存更新策略、缓存粒度控制、穿透问题优化、无底洞问题优化、雪崩问题优化、热点key优化。
第12章 开发运维的“陷阱”,介绍Redis开发运维中的一些棘手问题,具体包括:Linux配置优化、flush误操作数据恢复、如何让Redis变得安全、bigkey问题、热点key问题。
第13章 Redis监控运维云平台CacheCloud,介绍笔者所在团队开源的Redis运维工具CacheCloud,它有效解决了Redis监控和运维中的一些问题,本章将按照快速部署、机器部署、接入应用、用户功能、运维功能多个维度全面的介绍CacheCloud,相信在它的帮助下,读者可以更好的监控和运维好Redis。
第14章 Redis配置统计字典,会对Redis的系统状态信息以及全部配置做一个全面的梳理,希望本章能够成为Redis配置统计字典,协助大家分析和解决日常开发和运维中遇到的问题。
目标读者本书深入浅出地介绍了Redis相关知识,因此可以作为Redis新手的入门教程,同时本书凝聚了两位笔者在Red
评论
还没有评论。