第一部分 Redis初始篇 2
第1章 初识NoSQL 2
1.1 什么是NoSQL 2
1.2 NoSQL与传统关系型数据库的比较 3
1.3 在什么应用场景下使用NoSQL 4
1.4 NoSQL的数据模型 5
1.5 NoSQL数据库的分类 6
1.5.1 NoSQL数据库分类简介 6
1.5.2 各类NoSQL数据库的比较 6
第2章 认识Redis 8
2.1 Redis简介 8
2.1.1 Redis的由来 8
2.1.2 什么是Redis 8
2.1.3 Redis的特性 8
2.1.4 Redis的使用场景 9
2.2 搭建Redis环境 10
2.2.1 在Window环境下搭建 10
2.2.2 在Linux环境下搭建 13
2.3 Redis客户端 14
2.3.1 命令行客户端 14
2.3.2 可视化客户端 15
2.3.3 编程客户端 17
2.4 Redis的启动方式 18
2.4.1 在Window环境下的启动方式 18
2.4.2 在Linux环境下的启动方式 19
第3章 Redis数据类型 21
3.1 Redis数据类型之字符串(String)命令 21
3.1.1 设置键值对 22
3.1.2 获取键值对 24
3.1.3 键值对的偏移量 26
3.1.4 设置键的生存时间 26
3.1.5 键值对的值操作 27
3.1.6 键值对的计算 29
3.1.7 键值对的值增量 31
3.2 Redis数据类型之哈希(Hash)命令 34
3.2.1 设置哈希表域的值 34
3.2.2 获取哈希表中的域和值 36
3.2.3 哈希表统计 38
3.2.4 为哈希表中的域加上增量值 39
3.2.5 删除哈希表中的域 40
3.3 Redis数据类型之列表(List)命令 41
3.3.1 向列表中插入值 41
3.3.2 获取列表元素 44
3.3.3 删除列表元素 46
3.3.4 移动列表 50
3.3.5 列表模式 52
3.4 Redis数据类型之集合(Set)命令 53
3.4.1 向集合中添加元素 53
3.4.2 获取集合元素 54
3.4.3 集合运算 57
3.4.4 删除集合元素 60
3.5 Redis数据类型之有序集合(Sorted Set)命令 61
3.5.1 添加元素到有序集合中 62
3.5.2 获取有序集合元素 63
3.5.3 有序集合排名 69
3.5.4 有序集合运算 71
3.5.5 删除有序集合元素 72
第4章 Redis必备命令 76
4.1 键(key)命令 76
4.1.1 查询键 76
4.1.2 修改键 79
4.1.3 键的序列化 81
4.1.4 键的生存时间 82
4.1.5 键值对操作 85
4.1.6 删除键 89
4.2 HyperLogLog命令 90
4.2.1 添加键值对到HyperLogLog中 90
4.2.2 获取HyperLogLog的基数 91
4.2.3 合并HyperLogLog 92
4.3 脚本命令 92
4.3.1 缓存中的Lua脚本 92
4.3.2 对Lua脚本求值 93
4.3.3 杀死或清除Lua脚本 95
4.4 连接命令 96
4.4.1 解锁密码 96
4.4.2 断开客户端与服务器的连接 97
4.4.3 查看服务器的运行状态 97
4.4.4 输出打印消息 97
4.4.5 切换数据库 98
4.5 服务器命令 98
4.5.1 管理客户端 98
4.5.2 查看Redis服务器信息 101
4.5.3 修改并查看相关配置 108
4.5.4 数据持久化 111
4.5.5 实现主从服务 112
4.5.6 服务器管理 114
第5章 Redis数据库 116
5.1 Redis数据库切换 116
5.2 Redis数据库中的键操作 117
5.2.1 添加键 118
5.2.2 修改键 118
5.2.3 删除键 120
5.2.4 取键值 121
5.3 Redis数据库通知 121
5.3.1 数据库通知分类 122
5.3.2 数据库通知的实现原理 124
第二部分 Redis进阶篇 126
第6章 Redis客户端与服务器 126
6.1 Redis客户端 126
6.1.1 客户端的名字、套接字、标志和时间属性 126
6.1.2 客户端缓冲区 129
6.1.3 客户端的authenticated属性 131
6.1.4 客户端的argv和argc属性 131
6.1.5 关闭客户端 132
6.2 Redis服务器 132
6.2.1 服务器处理命令请求 132
6.2.2 服务器发送命令 133
6.2.3 服务器执行命令 134
6.2.4 服务器返回命令结果 135
6.3 服务器函数 136
6.3.1 serverCron函数 136
6.3.2 trackOperationsPerSecond函数 137
6.3.3 sigtermHandler函数 137
6.3.4 clientsCron函数 138
6.3.5 databasesCron函数 138
6.4 服务器属性 138
6.4.1 cronloops属性 138
6.4.2 rdb_child_pid与aof_child_pid属性 138
6.4.3 stat_peak_memory属性 139
6.4.4 lruclock属性 140
6.4.5 mstime与unixtime属性 141
6.4.6 aof_rewrite_scheduled属性 141
6.5 Redis服务器的启动过程 141
6.5.1 服务器状态结构的初始化 142
6.5.2 相关配置参数的加载 142
6.5.3 服务器数据结构的初始化 142
6.5.4 数据库状态的处理 143
6.5.5 执行服务器的循环事件 144
第7章 Redis底层数据结构 145
7.1 Redis简单动态字符串 145
7.1.1 SDS的实现原理 145
7.1.2 SDS API函数 147
7.2 Redis链表 148
7.2.1 链表的实现原理 148
7.2.2 链表API函数 150
7.3 Redis压缩列表 151
7.3.1 压缩列表的实现原理 151
7.3.2 压缩列表API函数 153
7.4 Redis快速列表 154
7.4.1 快速列表的实现原理 154
7.4.2 快速列表API函数 156
7.5 Redis字典 157
7.5.1 字典的实现原理 157
7.5.2 字典API函数 160
7.6 Redis整数集合 161
7.6.1 整数集合的实现原理 161
7.6.2 整数集合API函数 163
7.7 Redis跳表 164
7.7.1 跳表的实现原理 164
7.7.2 跳表API函数 166
7.8 Redis中的对象 167
7.8.1 对象类型 167
7.8.2 对象的编码方式 171
第8章 Redis排序 174
8.1 SORT排序命令 174
8.2 升序(ASC)与降序(DESC) 176
8.3 BY参数的使用 177
8.4 LIMIT参数的使用 180
8.5 GET与STORE参数的使用 181
8.6 多参数执行顺序 185
第9章 Redis事务 187
9.1 Redis事务简介 187
9.2 Redis事务的ACID特性 188
9.2.1 事务的原子性 188
9.2.2 事务的一致性 190
9.2.3 事务的隔离性 192
9.2.4 事务的持久性 193
9.3 Redis事务处理 194
9.3.1 事务的实现过程 194
9.3.2 悲观锁和乐观锁 197
9.3.3 事务的WATCH命令 198
第10章 Redis消息订阅 202
10.1 消息订阅发布概述 202
10.2 消息订阅发布实现 203
10.2.1 消息订阅发布模式命令 203
10.2.2 消息订阅功能之订阅频道 208
10.2.3 消息订阅功能之订阅模式 210
10.3 Redis消息队列 211
10.3.1 消息订阅发布模式的原理 211
10.3.2 消息生产者/消费者模式的原理 212
第11章 Redis持久化 213
11.1 Redis持久化操作概述 213
11.2 Redis持久化机制AOF 214
11.2.1 AOF持久化的配置 214
11.2.2 AOF持久化的实现 215
11.2.3 AOF文件重写 216
11.2.4 AOF文件处理 220
11.2.5 AOF持久化的优劣 221
11.3 Redis持久化机制RDB 222
11.3.1 RDB持久化 222
11.3.2 RDB文件 224
11.3.3 RDB文件的创建与加载 226
11.3.4 创建与加载RDB文件时服务器的状态 228
11.3.5 RDB持久化的配置 228
11.3.6 RDB持久化的优劣 229
11.4 AOF持久化与RDB持久化抉择 230
第12章 Redis集群 231
12.1 Redis集群的主从复制模式 231
12.1.1 什么是主从复制 231
12.1.2 主从复制配置 234
12.1.3 复制功能的原理 237
12.1.4 复制功能的实现步骤 242
12.1.5 Redis读写分离 245
12.1.6 Redis心跳机制 246
12.2 Redis集群的高可用哨兵模式 247
12.2.1 什么是高可用哨兵模式 248
12.2.2 哨兵模式的配置 249
12.2.3 Sentinel的配置选项 255
12.2.4 哨兵模式的实现原理 256
12.2.5 选择“合适”的slave节点作为master节点 263
12.2.6 Sentinel的下线状态 266
12.2.7 Sentinel内部的定时任务 267
12.3 Redis集群搭建 268
12.3.1 什么是Redis集群 268
12.3.2 集群中的节点和槽 269
12.3.3 集群搭建 274
12.3.4 使用Redis集群 285
12.3.5 集群中的错误 287
12.3.6 集群的消息 289
第13章 Redis高级功能 291
13.1 慢查询 291
13.1.1 配置慢查询 291
13.1.2 慢查询的生命周期 293
13.1.3 慢查询日志 294
13.1.4 慢查询命令 296
13.2 流水线 297
13.2.1 什么是Pipeline技术 297
13.2.2 如何使用Pipeline技术 298
13.3 地理位置的应用 298
13.3.1 存储地理位置 298
13.3.2 获取地理位置的经纬度信息 299
13.3.3 计算两地间的距离 300
13.3.4 获取指定范围内的位置信息 300
13.4 位图 302
13.4.1 二进制位数组 302
13.4.2 位数组的表示 304
13.4.3 位数组的实现 305
第三部分 Redis实战篇 310
第14章 Java操作Redis 310
14.1 Java客户端Jedis 310
14.1.1 Jedis的获取 310
14.1.2 Jedis的使用 311
14.1.3 Jedis常用API 311
14.1.4 Jedis事务 313
14.1.5 Jedis主从复制 316
14.1.6 Jedis的连接池 318
14.2 Java操作Redis数据类型 321
14.2.1 Java操作Redis字符串类型 322
14.2.2 Java操作Redis列表类型 323
14.2.3 Java操作Redis集合类型 325
14.2.4 Java操作Redis哈希表类型 326
14.2.5 Java操作Redis有序集合类型 328
14.3 Java操作Redis实现排行榜 329
14.4 Java操作Redis实现秒杀功能 332
14.5 Java操作Redis实现消息队列 335
14.6 Java操作Redis实现故障转移 338
第15章 SpringBoot操作Redis 343
15.1 在SpringBoot中应用Redis 343
15.1.1 Redis依赖配置 343
15.1.2 Redis配置文件 344
15.2 SpringBoot连接Redis 345
15.3 SpringBoot整合Redis实现缓存 352
第16章 Python操作Redis 364
16.1 在Python中应用Redis 364
16.1.1 在PyCharm中配置Redis 364
16.1.2 Python连接Redis 365
16.2 Python操作Redis数据类型 367
16.2.1 Python操作Redis String类型 367
16.2.2 Python操作Redis List类型 370
16.2.3 Python操作Redis Set类型 372
16.2.4 Python操作Redis Hash类型 374
16.2.5 Python操作Redis SortedSet类型 376
16.2.6 Python操作Redis的其他key 378
16.3 Python操作Redis实现消息订阅发布 380