[套装书]基于Docker的Redis入门与实战+Redis使用手册(2册)

作者
金华,胡书敏 黄健宏
丛书名
出版社
机械工业出版社
ISBN
9782107261172
简要
简介
内容简介书籍计算机书籍 ---------------------------8082548 - 基于Docker的Redis入门与实战--------------------------- 本书围绕“高并发大数据”的项目需求,全面讲述分布式缓存组件Redis的基本语法、核心技术和实战技能。 本书分为13章,第1~7章主要介绍Redis入门知识、Redis基本数据类型、Redis常用命令、Redis服务器和客户端实践技巧、Redis数据库操作技巧、Redis AOF和RDB持久化操作技巧、Redis集群的搭建方式,第8~11章主要介绍Redis同MySQL和MyCAT集群的整合技巧、Redis同lua的整合技巧等,第12、13章主要介绍Redis、Spring Boot和Spring Cloud如何构建微服务应用。 ---------------------------8063671 - Redis使用手册--------------------------- 本书系统化介绍Redis命令及其应用场景,内容深入,图文并茂,巨细靡遗,是掌握Redis的案头必备参考书。本书主要分为三大部分,共20章。第一部分“数据结构与应用”介绍Redis最核心的九种数据结构,列举了操作这些数据结构的众多命令及其详细信息,并在其中穿插介绍了多个使用 Redis 命令构建应用序的示例。通过这些程序示例,读者可以进一步加深对命令的认识,并学会如何在实际中应用这些命令,从而达到学而致用的目的。第二部分“附加功能”介绍Redis在数据结构的基础上为用户提供的额外功能。其中包括数据库管理、自动过期功能、流水线与事务、Lua 脚本、持久化、发布与订阅、模块管理等。读者可以通过阅读这一部分来学会如何将 Redis 应用在更多场景中。第三部分“多机功能”介绍 Redis 的三项多机功能:复制、Sentinel 和集群。读者可以通过阅读这一部分来获得扩展 Redis 读写性能的相关知识,并根据自己的情况为 Redis 系统选择合适的扩展方式。
目录
[套装书具体书目]
8063671 - Redis使用手册 - 9787111636526 - 机械工业出版社 - 定价 139
8082548 - 基于Docker的Redis入门与实战 - 9787111684589 - 机械工业出版社 - 定价 79



---------------------------8082548 - 基于Docker的Redis入门与实战---------------------------


前言
第1章 构建Redis开发环境 1
1.1 Redis概述 1
1.1.1 对比传统数据库与NoSQL数据库 1
1.1.2 Redis的特点 2
1.1.3 Redis更适合以分布式集群的方式提供服务 2
1.2 了解必要的Docker技能 3
1.2.1 Docker容器、镜像和仓库 3
1.2.2 在Windows上安装Docker 3
1.2.3 Docker镜像相关的命令 4
1.2.4 Docker容器相关的命令 4
1.3 安装和配置基于Docker的Redis环境 5
1.3.1 用docker pull下载最新Redis镜像 5
1.3.2 用docker run启动Redis容器 5
1.3.3 用docker logs观察Redis启动效果 6
1.3.4 通过docker exec进入Redis容器 6
1.3.5 停止、重启和删除Redis容器 7
1.3.6 查看Redis的版本 8
1.3.7 Redis服务器和客户端 8
1.3.8 总结容器和Redis的相关命令 9
1.4 本章小结 10
第2章 实践Redis的基本数据类型 11
2.1 Redis缓存初体验 11
2.1.1 用redis-cli启动客户端并缓存数据 11
2.1.2 设置数据的生存时间 12
2.2 针对字符串的命令 13
2.2.1 读写字符串的set和get命令 13
2.2.2 设置和获取多个字符串的命令 14
2.2.3 对值进行增量和减量操作 15
2.2.4 通过getset命令设置新值 16
2.2.5 针对字符串的其他操作 17
2.3 针对哈希类型变量的命令 17
2.3.1 设置并获取哈希值 18
2.3.2 hsetnx命令 19
2.3.3 针对key的相关操作 19
2.3.4 用hexists命令判断值是否存在 20
2.3.5 对哈希类型数据的删除操作 21
2.4 针对列表类型变量的命令 21
2.4.1 读写列表的命令 21
2.4.2 lpushx和rpushx命令 23
2.4.3 用list模拟堆栈和队列 24
2.4.4 用lrange命令获取指定区间内的数据 25
2.4.5 用lset命令修改列表数据 26
2.4.6 删除列表数据的命令 26
2.5 针对集合的命令 28
2.5.1 读写集合的命令 28
2.5.2 列表和集合类数据的使用场景 29
2.5.3 用sismember命令判断元素是否存在 29
2.5.4 获取集合的交集、并集和差集 29
2.5.5 用srem命令删除集合数据 30
2.6 针对有序集合的命令 31
2.6.1 读写有序集合的命令 31
2.6.2 通过zincrby命令修改元素的分值 33
2.6.3 用zscore命令获取指定元素的分数 33
2.6.4 查看有序集合里的元素排名 34
2.6.5 删除有序集合里的值 35
2.7 本章小结 36
第3章 实践Redis的常用命令 37
3.1 键操作命令 37
3.1.1 用exists命令判断键是否存在 37
3.1.2 用keys命令查找键 38
3.1.3 用scan命令查找键 38
3.1.4 重命名键 39
3.1.5 用del命令删除键 40
3.1.6 关于键生存时间的命令 41
3.2 HyperLogLog相关命令 42
3.2.1 用pfadd添加键值对 42
3.2.2 用pfcount统计基数值 43
3.2.3 用pfmerge进行合并操作 43
3.2.4 统计网站访问总人数 44
3.3 lua脚本相关命令 44
3.3.1 把lua脚本装载到缓存里 45
3.3.2 通过evalsha命令执行缓存中的脚本 45
3.3.3 清空缓存中lua脚本的命令 45
3.3.4 用eval命令执行lua脚本 46
3.4 排序相关命令 46
3.4.1 用sort命令进行排序 46
3.4.2 用by参数指定排序模式 48
3.4.3 用limit参数返回部分排序结果 48
3.4.4 sort命令里get参数的用法 49
3.4.5 通过store参数提升性能 50
3.5 本章小结 51
第4章 实践Redis服务器和客户端的操作 52
4.1 Redis服务器管理客户端的命令 52
4.1.1 获取和设置客户端的名字 52
4.1.2 通过client list命令查看客户端的信息 53
4.1.3 通过client pause命令暂停客户端的命令 53
4.1.4 通过client kill命令中断客户端连接 54
4.1.5 通过shutdown命令关闭服务器和客户端 54
4.2 查看Redis服务器的详细信息 55
4.2.1 通过info命令查看服务器信息 55
4.2.2 查看客户端连接状况 56
4.2.3 观察最大连接数 56
4.2.4 查看每秒执行多少条指令 56
4.2.5 观察内存用量 57
4.2.6 通过command命令查看Redis命令 57
4.2.7 查看指定Redis命令的信息 58
4.2.8 获取指定命令的所有键 58
4.3 查看并修改服务器的常用配置 59
4.3.1 查看服务器的配置 59
4.3.2 通过修改服务器配置设置密码 60
4.3.3 用config rewrite命令改写Redis配置文件 61
4.3.4 启动Redis服务器时加载配置文件 61
4.4 多个客户端连接远端服务器 63
4.4.1 多个Redis客户端连接远端服务器 63
4.4.2 通过docker inspect命令观察IP地址 64
4.4.3 实践客户端命令 65
4.4.4 通过info观察服务器状态 65
4.5 本章小结 66
第5章 Redis数据库操作实战 67
5.1 切换数据库操作 67
5.1.1 查看和设置默认的数据库个数 67
5.1.2 用select命令切换数据库 69
5.2 Redis事务操作 70
5.2.1 事务的概念与ACID特性 70
5.2.2 实现Redis事务的相关命令 70
5.2.3 通过discard命令撤销事务中的操作 71
5.2.4 Redis持久化与事务持久性 72
5.2.5 用watch命令监视指定键 73
5.3 地理位置相关操作 75
5.3.1 用geoadd命令存储地理位置 75
5.3.2 获取地理位置的经纬度信息 76
5.3.3 查询指定范围内的地理信息 76
5.3.4 查询地理位置间的距离 77
5.4 位图数据类型的应用 78
5.4.1 setbit和getbit操作 78
5.4.2 用bitop对位图进行运算 79
5.4.3 bitcount操作 80
5.5 慢查询实战分析 81
5.5.1 慢查询相关的配置参数 81
5.5.2 用slowlog get命令观察慢查询 81
5.5.3 慢查询相关命令 82
5.6 本章小结 83
第6章 Redis数据持久化操作 84
6.1 Redis持久化机制概述 84
6.1.1 基于AOF的持久化机制 84
6.1.2 基于RDB的持久化机制 85
6.2 AOF持久化机制实战 85
6.2.1 AOF配置文件的说明 85
6.2.2 实践AOF持久化 86
6.2.3 观察重写AOF文件的效果 88
6.2.4 模拟数据恢复的流程 89
6.2.5 修复AOF文件 91
6.3 RDB持久化机制实战 91
6.3.1 编写配置文件,生成RDB快照 92
6.3.2 用快照文件恢复数据 93
6.3.3 save和bgsave命令 94
6.4 如何选用持久化方式 94
6.4.1 对比两种持久化方式 95
6.4.2 综合使用两种持久化方式 95
6.4.3 查看持久化状态的命令 96
6.5 本章小结 97
第7章 搭建Redis集群 98
7.1 搭建基于主从复制模式的集群 98
7.1.1 主从复制模式概述 98
7.1.2 用命令搭建主从集群 99
7.1.3 通过配置搭建主从集群 101
7.1.4 配置读写分离效果 103
7.1.5 用心跳机制提高主从复制的可靠性 103
7.1.6 用偏移量检查数据是否一致 104
7.2 搭建哨兵模式的集群 105
7.2.1 哨兵模式概述 105
7.2.2 搭建哨兵模式集群 106
7.2.3 哨兵节点的常用配置 108
7.2.4 哨兵模式下的故障自动恢复效果 109
7.2.5 通过日志观察故障恢复流程 110
7.2.6 故障节点恢复后的表现 112
7.3 搭建cluster集群 113
7.3.1 哈希槽与cluster集群 113
7.3.2 初步搭建cluster集群 114
7.3.3 在cluster集群中读写数据 120
7.3.4 模拟扩容和数据迁移动作 121
7.3.5 cluster集群的常用配置参数 123
7.4 本章小结 124
第8章 Java整合MySQL与Redis 125
8.1 Java通过Jedis读写Redis 125
8.1.1 以Maven方式引入Jedis包 125
8.1.2 通过Jedis读写Redis字符串 126
8.1.3 操作各种Redis命令 128
8.1.4 以事务的方式操作Redis 129
8.1.5 Jedis连接池 130
8.1.6 用管道的方式提升操作性能 131
8.2 Java与各种Redis数据类型 132
8.2.1 读写列表类对象 132
8.2.2 读写哈希表对象 134
8.2.3 读写集合对象 135
8.2.4 读写有序集合对象 135
8.2.5 操作地理位置数据 136
8.3 Redis与MySQL的整合 137
8.3.1 通过Docker安装MySQL开发环境 138
8.3.2 通过JDBC连接并操作MySQL数据库 139
8.3.3 引入Redis做缓存 142
8.3.4 模拟缓存穿透现象 146
8.3.5 模拟内存使用不当的场景 147
8.4 Redis缓存实战分析 148
8.4.1 缓存不存在的键,以防穿透 148
8.4.2 合理设置超时时间,以防内存溢出 150
8.4.3 超时时间外加随机数,以防穿透 152
8.5 本章小结 153
第9章 Redis应用场景与案例实现 154
9.1 Redis消息队列实战 154
9.1.1 消息队列与Redis消息订阅发布模式 154
9.1.2 消息订阅发布的命令和流程 155
9.1.3 消息订阅发布的相关命令汇总 159
9.1.4 Java与消息队列的实战范例 159
9.2 用Java实战Redis分布式锁 162
9.2.1 观察分布式锁的特性 162
9.2.2 加锁与解锁的Redis命令分析 163
9.2.3 基于Java语言的Redis分布式锁 163
9.3 用Java实现Redis限流 167
9.3.1 zset有序集合相关命令与限流 167
9.3.2 zset有序集合与限流 167
9.4 Redis压力测试实战 169
9.5 本章小结 171
第10章 Redis整合MySQL集群与MyCAT分库分表组件 172
10.1 Redis整合MySQL主从集群 172
10.1.1 用Docker搭建MySQL主从集群 172
10.1.2 准备数据 176
10.1.3 创建Java项目,准备pom文件 177
10.1.4 用Java代码读写MySQL集群和Redis 178
10.1.5 MySQL主从集群整合Redis主从集群 181
10.2 Redis整合MySQL和MyCAT分库组件 185
10.2.1 分库分表概述 185
10.2.2 用MyCAT组件实现分库分表 187
10.2.3 Java、MySQL与MyCAT的整合范例 190
10.2.4 Redis集群与MySQL和MyCAT整合范例 195
10.3 本章小结 199
第11章 Redis整合lua脚本实战 200
11.1 在Redis里调用lua脚本 200
11.1.1 结合Redis叙述lua的特性 200
11.1.2 通过redis-cli命令运行lua脚本 201
11.1.3 直接通过eval命令执行脚本 202
11.1.4 通过return返回脚本运行结果 203
11.1.5 整理Redis里和lua相关的命令 203
11.1.6 观察lua脚本阻塞Redis的效果 204
11.2 Redis整合lua高级实战 205
11.2.1 通过KEYS和ARGV传递参数 205
11.2.2 在脚本里引入分支语句 206
11.2.3 while循环调用 207
11.2.4 for循环调用 208
11.2.5 在Java程序里调用Redis的lua脚本 209
11.2.6 lua脚本有错,不会执行 210
11.3 Redis整合lua脚本的实例分析 211
11.3.1 以计数模式实现限流效果 211
11.3.2 用lua脚本防止超卖 214
11.4 本章小结 217
第12章 Redis与Spring Boot的整合应用 218
12.1 在Spring Boot框架里引入Redis 218
12.1.1 SSM和Spring Boot框架介绍 218
12.1.2 准备MySQL数据库和数据表 220
12.1.3 搭建Spring Boot框架 221
12.1.4 在框架里引入Redis等组件 222
12.1.5 启动Spring Boot,观察缓存效果 228
12.2 Spring Boot框架整合Redis哨兵集群 229
12.2.1 搭建Redis哨兵集群 229
12.2.2 在Spring Boot框架里引入Redis哨兵集群 230
12.2.3 观察整合效果 231
12.3 Spring Boot框架整合Redis cluster集群 232
12.3.1 搭建Redis cluster集群 232
12.3.2 在Spring Boot里使用Redis cluster集群 232
12.4 在Spring Boot里实现秒杀案例 233
12.4.1 构建Spring Boot项目 233
12.4.2 编写启动类 235
12.4.3 在Controller层里定义秒杀接口 235
12.4.4 在Service层里通过lua脚本实现秒杀效果 236
12.4.5 配置Redis连接参数 238
12.4.6 演示秒杀效果 239
12.5 本章小结 242
第13章 Redis整合Spring Cloud微服务 243
13.1 微服务和Spring Cloud相关概念 243
13.1.1 传统架构与微服务的比较 243
13.1.2 Spring Cloud全家桶组件与微服务的关系 245
13.2 多模块整合Redis,构建微服务体系 246
13.2.1 用Docker准备Redis和MySQL集群环境 246
13.2.2 含Redis和Eureka的微服务架构图 247
13.2.3 开发Eureka服务器 248
13.2.4 开发含Redis的风控模块(Eureka客户端) 251
13.2.5 开发含Redis的下单模块(Eureka客户端) 259
13.3 Redis与Ribbon整合使用 264
13.3.1 Ribbon负载均衡组件与Redis的整合效果 265
13.3.2 引入多个风控组件分摊流量 265
13.3.3 从缓存和负载均衡维度观察整合后的效果 267
13.4 本章小结 268



---------------------------8063671 - Redis使用手册---------------------------


前 言
第1章 引言 1
1.1 Redis简介 1
1.2 内容编排 3
1.3 目标读者 4
1.4 预备工作 4
1.5 执行命令 5
1.6 配置服务器 6
1.7 示例代码 7
1.8 版本说明 7
1.9 读者服务网站 8
1.10 启程 8
第一部分 数据结构与应用
第2章 字符串 10
2.1 SET:为字符串键设置值 11
2.1.1 改变覆盖规则 12
2.1.2 其他信息 13
2.2 GET:获取字符串键的值 13
2.3 GETSET:获取旧值并设置新值 14
示例:缓存 14
示例:锁 16
2.4 MSET:一次为多个字符串键设置值 18
2.5 MGET:一次获取多个字符串键的值 19
2.6 MSETNX:只在键不存在的情况下,一次为多个字符串键设置值 20
示例:存储文章信息 20
2.7 STRLEN:获取字符串值的字节长度 25
2.8 字符串值的索引 26
2.9 GETRANGE:获取字符串值指定索引范围上的内容 26
2.10 SETRANGE:对字符串值的指定索引范围进行设置 27
2.10.1 自动扩展被修改的字符串 29
2.10.2 在值里面填充空字节 29
2.10.3 其他信息 30
示例:给文章存储程序加上文章长度计数功能和文章预览功能 31
2.11 APPEND:追加新内容到值的末尾 32
2.11.1 处理不存在的键 33
2.11.2 其他信息 33
示例:存储日志 34
2.12 使用字符串键存储数字值 37
2.13 INCRBY、DECRBY:对整数值执行加法操作和减法操作 37
2.13.1 类型限制 38
2.13.2 处理不存在的键 39
2.13.3 其他信息 40
2.14 INCR、DECR:对整数值执行加1操作和减1操作 40
2.15 INCRBYFLOAT:对数字值执行浮点数加法操作 41
2.15.1 处理不存在的键 41
2.15.2 使用INCRBYFLOAT执行浮点数减法操作 41
2.15.3 INCRBYFLOAT与整数值 42
2.15.4 小数位长度限制 43
2.15.5 其他信息 43
示例:ID生成器 43
示例:计数器 44
示例:限速器 46
2.16 重点回顾 48
第3章 散列 49
3.1 散列简介 50
3.2 HSET:为字段设置值 51
3.2.1 使用新值覆盖旧值 53
3.2.2 其他信息 53
3.3 HSETNX:只在字段不存在的情况下为它设置值 53
3.4 HGET:获取字段的值 54
3.4.1 处理不存在的字段或者不存在的散列 55
3.4.2 其他信息 55
示例:实现短网址生成程序 55
3.5 HINCRBY:对字段存储的整数值执行加法或减法操作 58
3.5.1 执行减法操作 58
3.5.2 处理异常情况 59
3.5.3 其他信息 59
3.6 HINCRBYFLOAT:对字段存储的数字值执行浮点数加法或减法操作 59
3.6.1 增量和字段值的类型限制 60
3.6.2 执行减法操作 60
3.6.3 其他信息 60
示例:使用散列键重新实现计数器 60
3.7 HSTRLEN:获取字段值的字节长度 63
3.8 HEXISTS:检查字段是否存在 63
3.9 HDEL:删除字段 64
3.10 HLEN:获取散列包含的字段数量 65
示例:实现用户登录会话 66
3.11 HMSET:一次为多个字段设置值 69
3.11.1 使用新值覆盖旧值 69
3.11.2 其他信息 70
3.12 HMGET:一次获取多个字段的值 70
3.13 HKEYS、HVALS、HGETALL:获取所有字段、所有值、所有字段和值 71
3.13.1 字段在散列中的排列顺序 72
3.13.2 其他信息 73
示例:存储图数据 73
示例:使用散列键重新实现文章存储程序 77
3.14 散列与字符串 79
3.14.1 散列键的优点 80
3.14.2 字符串键的优点 81
3.14.3 字符串键和散列键的选择 82
3.15 重点回顾 82
第4章 列表 83
4.1 LPUSH:将元素推入列表左端 84
4.1.1 一次推入多个元素 84
4.1.2 其他信息 86
4.2 RPUSH:将元素推入列表右端 86
4.2.1 一次推入多个元素 86
4.2.2 其他信息 88
4.3 LPUSHX、RPUSHX:只对已存在的列表执行推入操作 88
4.3.1 每次只能推入单个元素 89
4.3.2 其他信息 90
4.4 LPOP:弹出列表最左端的元素 90
4.5 RPOP:弹出列表最右端的元素 91
4.6 RPOPLPUSH:将右端弹出的元素推入左端 92
4.6.1 源列表和目标列表相同 93
4.6.2 处理空列表 94
4.6.3 其他信息 95
示例:先进先出队列 95
4.7 LLEN:获取列表的长度 96
4.8 LINDEX:获取指定索引上的元素 97
4.8.1 处理超出范围的索引 98
4.8.2 其他信息 98
4.9 LRANGE:获取指定索引范围上的元素 98
4.9.1 获取列表包含的所有元素 99
4.9.2 处理超出范围的索引 100
4.9.3 其他信息 101
示例:分页 101
4.10 LSET:为指定索引设置新元素 103
4.10.1 处理超出范围的索引 104
4.10.2 其他信息 104
4.11 LINSERT:将元素插入列表 104
4.11.1 处理不存在的元素 105
4.11.2 其他信息 105
4.12 LTRIM:修剪列表 105
4.12.1 处理负数索引 107
4.12.2 其他信息 107
4.13 LREM:从列表中移除指定元素 107
示例:待办事项列表 109
4.14 BLPOP:阻塞式左端弹出操作 112
4.14.1 解除阻塞状态 112
4.14.2 处理空列表 113
4.14.3 列表名的作用 114
4.14.4 阻塞效果的范围 114
4.14.5 其他信息 114
4.15 BRPOP:阻塞式右端弹出操作 114
4.16 BRPOPLPUSH:阻塞式弹出并推入操作 114
4.16.1 处理源列表为空的情况 116
4.16.2 其他信息 116
示例:带有阻塞功能的消息队列 116
4.17 重点回顾 119
第5章 集合 120
5.1 SADD:将元素添加到集合 121
5.1.1 忽略已存在元素 122
5.1.2 其他信息 122
5.2 SREM:从集合中移除元素 122
5.2.1 忽略不存在的元素 122
5.2.2 其他信息 123
5.3 SMOVE:将元素从一个集合移动到另一个集合 123
5.3.1 忽略不存在的元素 124
5.3.2 覆盖已存在的元素 124
5.3.3 其他信息 125
5.4 SMEMBERS:获取集合包含的所有元素 125
5.4.1 元素的无序排列 126
5.4.2 其他信息 126
5.5 SCARD:获取集合包含的元素数量 126
5.6 SISMEMBER:检查给定元素是否存在于集合 127
示例:唯一计数器 128
示例:打标签 129
示例:点赞 131
示例:投票 132
示例:社交关系 135
5.7 SRANDMEMBER:随机获取集合中的元素 137
5.7.1 返回指定数量的元素 138
5.7.2 其他信息 139
5.8 SPOP:随机地从集合中移除指定数量的元素 139
5.8.1 SPOP与SRANDMEMBER的区别 140
5.8.2 其他信息 141
示例:抽奖 141
5.9 SINTER、SINTERSTORE:对集合执行交集计算 142
5.9.1 SINTERSTORE命令 143
5.9.2 其他信息 143
5.10 SUNION、SUNIONSTORE:对集合执行并集计算 143
5.10.1 SUNIONSTORE命令 144
5.10.2 其他信息 144
5.11 SDIFF、SDIFFSTORE:对集合执行差集计算 144
5.11.1 SDIFFSTORE命令 145
5.11.2 其他信息 145
示例:共同关注与推荐关注 146
示例:使用反向索引构建商品筛选器 149
5.12 重点回顾 152
第6章 有序集合 153
6.1 ZADD:添加或更新成员 154
6.1.1 更新已有成员的分值 154
6.1.2 指定要执行的操作 154
6.1.3 返回被修改成员的数量 155
6.1.4 其他信息 156
6.2 ZREM:移除指定的成员 156
6.2.1 忽略不存在的成员 157
6.2.2 其他信息 157
6.3 ZSCORE:获取成员的分值 157
6.4 ZINCRBY:对成员的分值执行自增或自减操作 158
6.4.1 执行自减操作 159
6.4.2 处理不存在的键或者不存在的成员 160
6.4.3 其他信息 160
6.5 ZCARD:获取有序集合的大小 160
6.6 ZRANK、ZREVRANK:获取成员在有序集合中的排名 161
6.6.1 处理不存在的键或者不存在的成员 162
6.6.2 其他信息 162
6.7 ZRANGE、ZREVRANGE:获取指定索引范围内的成员 162
6.7.1 使用负数索引 163
6.7.2 获取成员及其分值 164
6.7.3 处理不存在的有序集合 165
6.7.4 其他信息 165
示例:排行榜 165
6.8 ZRANGEBYSCORE、ZREVRAN-GEBYSCORE:获取指定分值范围内的成员 167
6.8.1 获取成员及其分值 168
6.8.2 限制命令返回的成员数量 168
6.8.3 使用开区间分值范围 169
6.8.4 使用无限值作为范围 170
6.8.5 其他信息 171
6.9 ZCOUNT:统计指定分值范围内的成员数量 171
6.9.1 分值范围的格式 171
6.9.2 其他信息 172
示例:时间线 172
6.10 ZREMRANGEBYRANK:移除指定排名范围内的成员 175
6.10.1 使用负数排名 175
6.10.2 其他信息 175
6.11 ZREMRANGEBYSCORE:移除指定分值范围内的成员 176
6.12 ZUNIONSTORE、ZINTERSTORE:有序集合的并集运算和交集运算 176
6.12.1 指定聚合函数 177
6.12.2 设置权重 179
6.12.3 使用集合作为输入 180
6.12.4 其他信息 181
示例:商品推荐 181
6.13 ZRANGEBYLEX、ZREVRAN-GEBYLEX:返回指定字典序范围内的成员 182
6.13.1 ZREVRANGEBYLEX 184
6.13.2 限制命令返回的成员数量 184
6.13.3 其他信息 185
6.14 ZLEXCOUNT:统计位于字典序指定范围内的成员数量 185
6.15 ZREMRANGEBYLEX:移除位于字典序指定范围内的成员 186
示例:自动补全 187
6.16 ZPOPMAX、ZPOPMIN:弹出分值最高和最低的成员 188
6.17 BZPOPMAX、BZPOPMIN:阻塞式最大/最小元素弹出操作 189
6.18 重点回顾 191
第7章 HyperLogLog 192
7.1 HyperLogLog简介 193
7.2 PFADD:对集合元素进行计数 193
7.3 PFCOUNT:返回集合的近似基数 194
7.3.1 返回并集的近似基数 194
7.3.2 其他信息 195
示例:优化唯一计数器 195
示例:检测重复信息 196
7.4 PFMERGE:计算多个HyperLogLog的并集 198
7.4.1 PFCOUNT与PFMERGE 198
7.4.2 其他信息 199
示例:实现每周/月度/年度计数器 199
7.5 重点回顾 200
第8章 位图 201
8.1 SETBIT:设置二进制位的值 201
8.1.1 位图的扩展 202
8.1.2 偏移量只能为正数 203
8.1.3 其他信息 203
8.2 GETBIT:获取二进制位的值 203
8.2.1 处理范围之外的偏移量 204
8.2.2 其他信息 204
8.3 BITCOUNT:统计被设置的二进制位数量 204
8.3.1 只统计位图指定字节范围内的二进制位 204
8.3.2 使用负数偏移量定义统计范围 206
8.3.3 其他信息 206
示例:用户行为记录器 207
8.4 BITPOS:查找第一个指定的二进制位值 208
8.4.1 只在指定的字节范围内进行查找 209
8.4.2 使用负数偏移量定义查找范围 209
8.4.3 边界情况处理 210
8.4.4 其他信息 211
8.5 BITOP:执行二进制位运算 211
8.5.1 处理不同长度的位图 212
8.5.2 其他信息 212
示例:0-1矩阵 212
8.6 BITFIELD:在位图中存储整数值 214
8.6.1 根据偏移量对区域进行设置 214
8.6.2 根据索引对区域进行设置 216
8.6.3 获取区域存储的值 216
8.6.4 执行加法操作或减法操作 217
8.6.5 处理溢出 218
8.6.6 使用位图存储整数的原因 219
8.6.7 其他信息 219
示例:紧凑计数器 219
8.7 使用字符串命令对位图进行操作 221
8.8 重点回顾 222
第9章 地理坐标 223
9.1 GEOADD:存储坐标 224
9.1.1 更新已有位置的坐标 224
9.1.2 其他信息 224
9.2 GEOPOS:获取指定位置的坐标 224
9.3 GEODIST:计算两个位置之间的直线距离 225
9.3.1 指定距离的单位 225
9.3.2 处理不存在的位置 226
9.3.3 其他信息 226
示例:具有基本功能的用户地理位置程序 226
9.4 GEORADIUS:查找指定坐标半径范围内的其他位置 228
9.4.1 返回被匹配位置与中心点之间的距离 229
9.4.2 返回被匹配位置的坐标 229
9.4.3 排序查找结果 230
9.4.4 限制命令获取的位置数量 231
9.4.5 同时使用多个可选项 231
9.4.6 其他信息 232
9.5 GEORADIUSBYMEMBER:查找指定位置半径范围内的其他位置 232
示例:查找附近用户 233
9.6 GEOHASH:获取指定位置的Geohash值 235
9.6.1 在进行范围查找时获取Geohash值 235
9.6.2 其他信息 236
9.7 使用有序集合命令操作GEO数据 236
9.8 重点回顾 237
第10章 流 238
10.1 XADD:追加新元素到流的末尾 239
10.1.1 流元素的ID 239
10.1.2 不完整的流ID 240
10.1.3 流元素ID的限制 240
10.1.4 自动生成元素ID 241
10.1.5 限制流的长度 242
10.1.6 其他信息 243
10.2 XTRIM:对流进行修剪 243
10.3 XDEL:移除指定元素 244
10.4 XLEN:获取流包含的元素数量 244
10.5 XRANGE、XREVRANGE:访问流中元素 245
10.5.1 获取ID指定的单个元素 245
10.5.2 获取指定ID范围内的多个元素 246
10.5.3 获取所有元素 247
10.5.4 获取指定数量的元素 248
10.5.5 对流进行迭代 249
10.5.6 以逆序访问流中元素 251
10.5.7 其他信息 251
10.6 XREAD:以阻塞或非阻塞方式获取流元素 251
10.6.1 从多个流中获取大于指定ID的元素 251
10.6.2 迭代流 253
10.6.3 阻塞 254
10.6.4 只获取新出现的元素 256
10.6.5 其他信息 258
示例:消息队列 258
10.7 消费者组 260
10.7.1 创建消费者组 261
10.7.2 读取消费者组 262
10.7.3 消费者 262
10.7.4 消息的状态转换 263
10.7.5 实际示例 263
10.8 XGROUP:管理消费者组 264
10.8.1 创建消费者组 264
10.8.2 修改消费者组的最后递送消息ID 265
10.8.3 删除消费者 267
10.8.4 删除消费者组 268
10.9 XREADGROUP:读取消费者组中的消息 268
10.9.1 读取未递送过的新消息 269
10.9.2 其他信息 270
10.10 XPENDING:显示待处理消息的相关信息 270
10.11 XACK:将消息标记为“已处理” 271
10.12 XCLAIM:转移消息的归属权 272
10.12.1 只返回被转移消息的ID 273
10.12.2 其他信息 273
10.13 XINFO:查看流和消费者组的相关信息 273
10.13.1 打印消费者信息 273
10.13.2 打印消费者组信息 274
10.13.3 打印流消息 274
10.13.4 其他信息 275
示例:为消息队列提供消费者组功能 275
10.14 重点回顾 277
第二部分 附加功能
第11章 数据库 280
11.1 SELECT:切换至指定的数据库 281
11.2 KEYS:获取所有与给定匹配符相匹配的键 282
11.2.1 全局匹配符 282
11.2.2 其他信息 283
11.3 SCAN:以渐进方式迭代数据库中的键 283
11.3.1 一次简单的迭代示例 284
11.3.2 SCAN命令的迭代保证 285
11.3.3 游标的使用 285
11.3.4 迭代与给定匹配符相匹配的键 285
11.3.5 指定返回键的期望数量 286
11.3.6 数据结构迭代命令 287
11.3.7 其他信息 289
示例:构建数据库迭代器 289
11.4 RANDOMKEY:随机返回一个键 292
11.5 SORT:对键的值进行排序 292
11.5.1 指定排序方式 293
11.5.2 对字符串值进行排序 294
11.5.3 只获取部分排序结果 294
11.5.4 获取外部键的值作为结果 295
11.5.5 使用外部键的值作为排序权重 298
11.5.6 保存排序结果 299
11.5.7 其他信息 300
11.6 EXISTS:检查给定键是否存在 300
11.6.1 只能接受单个键的EXISTS命令 300
11.6.2 其他信息 300
11.7 DBSIZE:获取数据库包含的键值对数量 301
11.8 TYPE:查看键的类型 301
示例:数据库取样程序 302
11.9 RENAME、RENAMENX:修改键名 304
11.9.1 覆盖已存在的键 305
11.9.2 只在新键名尚未被占用的情况下进行改名 305
11.9.3 其他信息 306
11.10 MOVE:将给定的键移动到另一个数据库 306
11.10.1 不覆盖同名键 306
11.10.2 其他信息 307
11.11 DEL:移除指定的键 307
11.12 UNLINK:以异步方式移除指定的键 307
11.13 FLUSHDB:清空当前数据库 308
11.13.1 async选项 308
11.13.2 其他信息 309
11.14 FLUSHALL:清空所有数据库 309
11.14.1 async选项 309
11.14.2 其他信息 309
11.15 SWAPDB:互换数据库 309
示例:使用SWAPDB命令实行在线替换数据库 310
11.16 重点回顾 312
第12章 自动过期 313
12.1 EXPIRE、PEXPIRE:设置生存时间 313
12.1.1 更新键的生存时间 315
12.1.2 其他信息 315
示例:带有自动移除特性的缓存程序 316
12.2 SET命令的EX选项和PX选项 317
12.2.1 组合命令的安全问题 317
12.2.2 其他信息 318
示例:带有自动释放特性的锁 318
12.3 EXPIREAT、PEXPIREAT:设置过期时间 319
12.3.1 EXPIREAT使用示例 320
12.3.2 PEXPIREAT使用示例 320
12.3.3 更新键的过期时间 321
12.3.4 自动过期特性的不足之处 321
12.3.5 其他信息 322
12.4 TTL、PTTL:获取键的剩余生存时间 322
12.4.1 没有剩余生存时间的键和不存在的键 322
12.4.2 TTL命令的精度问题 322
12.4.3 其他信息 323
示例:自动过期的登录会话 323
示例:自动淘汰冷门数据 326
12.5 重点回顾 328
第13章 流水线与事务 329
13.1 流水线 329
示例:使用流水线优化随机键创建程序 331
13.2 事务 333
13.2.1 MULTI:开启事务 335
13.2.2 EXEC:执行事务 335
13.2.3 DISCARD:放弃事务 336
13.2.4 事务的安全性 337
13.2.5 事务对服务器的影响 337
13.2.6 流水线与事务 337
示例:实现mlpop()函数 338
13.3 带有乐观锁的事务 339
13.3.1 WATCH:对键进行监视 341
13.3.2 UNWATCH:取消对键的监视 342
示例:带有身份验证功能的锁 343
示例:带有身份验证功能的计数信号量 344
13.4 重点回顾 347
第14章 Lua脚本 348
14.1 EVAL:执行脚本 349
14.1.1 使用脚本执行Redis命令 349
14.1.2 值转换 350
14.1.3 全局变量保护 352
14.1.4 在脚本中切换数据库 353
14.1.5 脚本的原子性 353
14.1.6 以命令行方式执行脚本 353
14.1.7 其他信息 354
示例:使用脚本重新实现带有身份验证功能的锁 354
示例:实现LPOPRPUSH命令 355
14.2 SCRIPT LOAD和EVALSHA:缓存并执行脚本 357
14.3 脚本管理 359
14.3.1 SCRIPT EXISTS:检查脚本是否已被缓存 359
14.3.2 SCRIPT FLUSH:移除所有已缓存脚本 359
14.3.3 SCRIPT KILL:强制停止正在运行的脚本 360
14.4 内置函数库 361
14.4.1 redis包 362
14.4.2 bit包 364
14.4.3 struct包 364
14.4.4 cjson包 365
14.4.5 cmsgpack包 365
14.5 脚本调试 366
14.5.1 一个简单的调试示例 366
14.5.2 调试命令 368
14.5.3 断点 369
14.5.4 动态断点 371
14.5.5 输出调试日志 372
14.5.6 执行指定的代码或命令 373
14.5.7 显示调用链 373
14.5.8 重载脚本 375
14.5.9 调试模式 376
14.5.10 终止调试会话 378
14.6 重点回顾 379
第15章 持久化 380
15.1 RDB持久化 380
15.1.1 SAVE:阻塞服务器并创建RDB文件 381
15.1.2 BGSAVE:以非阻塞方式创建RDB文件 382
15.1.3 通过配置选项自动创建RDB文件 382
15.1.4 SAVE命令和BGSAVE命令的选择 384
15.1.5 RDB文件结构 384
15.1.6 载入RDB文件 386
15.1.7 数据丢失 387
15.2 AOF持久化 389
15.2.1 打开AOF持久化功能 390
15.2.2 设置AOF文件的冲洗频率 391
15.2.3 AOF重写 391
15.2.4 AOF持久化的优缺点 394
15.3 RDB-AOF混合持久化 394
15.4 同时使用RDB持久化和AOF持久化 396
15.5 无持久化 397
15.6 SHUTDOWN:关闭服务器 397
15.6.1 通过可选项指示持久化操作 398
15.6.2 其他信息 399
15.7 重点回顾 399
第16章 发布与订阅 400
16.1 PUBLISH:向频道发送消息 402
16.2 SUBSCRIBE:订阅频道 402
16.2.1 接收频道消息 403
16.2.2 其他信息 404
16.3 UNSUBSCRIBE:退订频道 404
16.3.1 UNSUBSCRIBE命令在不同客户端中的应用 404
16.3.2 其他信息 405
16.4 PSUBSCRIBE:订阅模式 405
16.4.1 接收模式消息 406
16.4.2 其他信息 407
16.5 PUNSUBSCRIBE:退订模式 407
16.5.1 PUNSUBSCRIBE命令在不同客户端中的应用 407
16.5.2 其他信息 408
16.6 PUBSUB:查看发布与订阅的相关信息 408
16.6.1 查看被订阅的频道 408
16.6.2 查看频道的订阅者数量 409
16.6.3 查看被订阅模式的总数量 409
16.6.4 其他信息 409
示例:广播系统 409
16.7 重点回顾 411
第17章 模块 412
17.1 模块的管理 413
17.1.1 编译模块 413
17.1.2 载入模块 413
17.1.3 列出已载入的模块 414
17.1.4 卸载模块 415
17.2 ReJSON模块 416
17.2.1 编译和载入 416
17.2.2 使用示例 417
17.2.3 ReJSON路径 418
17.2.4 API简介 420
17.3 RediSQL模块 423
17.3.1 编译模块 423
17.3.2 使用示例 424
17.3.3 API简介 425
17.4 RediSearch模块 428
17.4.1 下载与编译 428
17.4.2 使用示例 429
17.4.3 API简介 430
17.5 重点回顾 442
第三部分 多机功能
第18章 复制 444
18.1 REPLICAOF:将服务器设置为从服务器 446
18.1.1 通过配置选项设置从服务器 447
18.1.2 取消复制 447
18.1.3 其他信息 448
18.2 ROLE:查看服务器的角色 448
18.2.1 主服务器执行ROLE命令 448
18.2.2 从服务器执行ROLE命令 449
18.2.3 其他信息 449
18.3 数据同步 449
18.3.1 完整同步 450
18.3.2 在线更新 450
18.3.3 部分同步 451
18.4 无须硬盘的复制 452
18.5 降低数据不一致情况出现的概率 452
18.6 可写的从服务器 453
示例:使用从服务器处理复杂计算操作 454
18.7 脚本复制 455
18.7.1 脚本传播模式 455
18.7.2 命令传播模式 456
18.7.3 选择性命令传播 457
18.7.4 模式的选择 458
18.8 重点回顾 459
第19章 Sentinel 460
19.1 启动Sentinel 461
19.2 Sentinel网络 464
19.3 Sentinel管理命令 466
19.3.1 SENTINEL masters:获取所有被监视主服务器的信息 467
19.3.2 SENTINEL master:获取指定被监视主服务器的信息 468
19.3.3 SENTINEL slaves:获取被监视主服务器的从服务器信息 469
19.3.4 SENTINEL sentinels:获取其他Sentinel的相关信息 471
19.3.5 SENTINEL get-master-addr-by-name:获取给定主服务器的IP地址和端口号 472
19.3.6 SENTINEL reset:重置主服务器状态 473
19.3.7 SENTINEL failover:强制执行故障转移 473
19.3.8 SENTINEL ckquorum:检查可用Sentinel的数量 474
19.3.9 SENTINEL flushconfig:强制写入配置文件 474
19.4 在线配置Sentinel 475
19.4.1 SENTINEL monitor:监视给定主服务器 475
19.4.2 SENTINEL remove:取消对给定主服务器的监视 476
19.4.3 SENTINEL set:修改Sentinel配置选项的值 477
19.4.4 使用在线配置命令的注意事项 478
示例:使用redis-py管理Sentinel 479
19.5 重点回顾 479
第20章 集群 481
20.1 基本特性 481
20.1.1 复制与高可用 481
20.1.2 分片与重分片 482
20.1.3 高性能 482
20.1.4 简单易用 483
20.2 搭建集群 483
20.2.1 快速搭建集群 483
20.2.2 手动搭建集群 486
示例:使用客户端连接集群 489
20.3 散列标签 491
20.4 打开/关闭从节点的读命令执行权限 492
20.4.1 READONLY:打开读命令执行权限 493
20.4.2 READWRITE:关闭读命令执行权限 493
20.4.3 其他信息 494
20.5 集群管理工具redis-cli 494
20.5.1 创建集群 495
20.5.2 查看集群信息 496
20.5.3 检查集群 497
20.5.4 修复槽错误 498
20.5.5 重分片 499
20.5.6 负载均衡 501
20.5.7 添加节点 502
20.5.8 移除节点 503
20.5.9 执行命令 504
20.5.10 设置超时时间 504
20.5.11 导入数据 505
20.6 集群管理命令 506
20.6.1 CLUSTER MEET:将节点添加至集群 506
20.6.2 CLUSTER NODES:查看集群内所有节点的相关信息 508
20.6.3 CLUSTER MYID:查看当前节点的运行ID 511
20.6.4 CLUSTER INFO:查看集群信息 512
20.6.5 CLUSTER FORGET:从集群中移除节点 513
20.6.6 CLUSTER REPLICATE:将节点变为从节点 514
20.6.7 CLUSTER REPLICAS:查看给定节点的所有从节点 515
20.6.8 CLUSTER FAILOVER:强制执行故障转移 516
20.6.9 CLUSTER RESET:重置节点 517
20.7 槽管理命令 518
20.7.1 CLUSTER SLOTS:查看槽与节点之间的关联信息 519
20.7.2 CLUSTER ADDSLOTS:把槽指派给节点 520
20.7.3 CLUSTER DELSLOTS:撤销对节点的槽指派 521
20.7.4 CLUSTER FLUSHSLOTS:撤销对节点的所有槽指派 522
20.7.5 CLUSTER KEYSLOT:查看键所属的槽 523
20.7.6 CLUSTER COUNTKEYSINSLOT:查看槽包含的键数量 524
20.7.7 CLUSTER GETKEYSINSLOT:获取槽包含的键 524
20.7.8 CLUSTER SETSLOT:改变槽的状态 525
20.8 重点回顾 527
附录A Redis安装方法 528
附录B redis-py安装方法 531
附录C Redis命令索引表 533

推荐

车牌查询
桂ICP备20004708号-3