《Redis设计与实现》作者、《Redis实战》译者、《Redis命令参考》译者黄健宏全新力作,学习 Redis 的信心之选。
本书系统化介绍Redis命令及其应用场景,内容深入,图文并茂,巨细靡遗,是掌握Redis的案头必备参考书。本书主要分为三大部分,共20章。第一部分“数据结构与应用”介绍Redis核心的九种数据结构,列举了操作这些数据结构的众多命令及其详细信息,并在其中穿插介绍了多个使用 Redis 命令构建应用序的示例。通过这些程序示例,读者可以进一步加深对命令的认识,并学会如何在实际中应用这些命令,从而达到学而致用的目的。第二部分“附加功能”介绍Redis在数据结构的基础上为用户提供的额外功能。其中包括数据库管理、自动过期功能、流水线与事务、Lua 脚本、持久化、发布与订阅、模块管理等。读者可以通过阅读这一部分来学会如何将 Redis 应用在更多场景中。第三部分“多机功能”介绍 Redis 的三项多机功能:复制、Sentinel 和集群。读者可以通过阅读这一部分来获得扩展 Redis 读写性能的相关知识,并根据自己的情况为 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.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
示例:给文章存储程序加上文章长度计数功能和文章预览功能 31
2.11 APPEND:追加新内容到值的末尾 32
示例:存储日志 34
2.12 使用字符串键存储数字值 37
2.13 INCRBY、DECRBY:对整数值执行加法操作和减法操作 37
2.14 INCR、DECR:对整数值执行加1操作和减1操作 40
2.15 INCRBYFLOAT:对数字值执行浮点数加法操作 41
示例:ID生成器 43
示例:计数器 44
示例:限速器 46
2.16 重点回顾 48
第3章 散列 49
3.1 散列简介 50
3.2 HSET:为字段设置值 51
3.4 HGET:获取字段的值 54
示例:实现短网址生成程序 55
3.5 HINCRBY:对字段存储的整数值执行加法或减法操作 58
3.6 HINCRBYFLOAT:对字段存储的数字值执行浮点数加法或减法操作 59
示例:使用散列键重新实现计数器 60
3.7 HSTRLEN:获取字段值的字节长度 63
3.8 HEXISTS:检查字段是否存在 63
3.9 HDEL:删除字段 64
3.10 HLEN:获取散列包含的字段数量 65
示例:实现用户登录会话 66
3.11 HMSET:一次为多个字段设置值 69
3.12 HMGET:一次获取多个字段的值 70
3.13 HKEYS、HVALS、HGETALL:获取所有字段、所有值、所有字段和值 71
示例:存储图数据 73
示例:使用散列键重新实现文章存储?程序 77
3.14 散列与字符串 79
3.15 重点回顾 82
第4章 列表 83
4.1 LPUSH:将元素推入列表左端 84
4.2 RPUSH:将元素推入列表右端 86
4.3 LPUSHX、RPUSHX:只对已存在的列表执行推入操作 88
4.4 LPOP:弹出列表最左端的元素 90
4.5 RPOP:弹出列表最右端的元素 91
4.6 RPOPLPUSH:将右端弹出的元素推入左端 92
示例:先进先出队列 95
4.7 LLEN:获取列表的长度 96
4.8 LINDEX:获取指定索引上的元素 97
4.9 LRANGE:获取指定索引范围上的元素 98
示例:分页 101
4.10 LSET:为指定索引设置新元素 103
4.11 LINSERT:将元素插入列表 104
4.12 LTRIM:修剪列表 105
4.13 LREM:从列表中移除指定元素 107
示例:待办事项列表 109
4.14 BLPOP:阻塞式左端弹出操作 112
4.15 BRPOP:阻塞式右端弹出操作 114
4.16 BRPOPLPUSH:阻塞式弹出并推入操作 114
示例:带有阻塞功能的消息队列 116
4.17 重点回顾 119
第5章 集合 120
5.1 SADD:将元素添加到集合 121
5.2 SREM:从集合中移除元素 122
5.3 SMOVE:将元素从一个集合移动到另一个集合 123
5.4 SMEMBERS:获取集合包含的所有元素 125
5.5 SCARD:获取集合包含的元素数量 126
5.6 SISMEMBER:检查给定元素是否存在于集合 127
示例:唯一计数器 128
示例:打标签 129
示例:点赞 131
示例:投票 132
示例:社交关系 135
5.7 SRANDMEMBER:随机获取集合中的元素 137
5.8 SPOP:随机地从集合中移除指定数量的元素 139
示例:抽奖 141
5.9 SINTER、SINTERSTORE:对集合执行交集计算 142
5.10 SUNION、SUNIONSTORE:对集合执行并集计算 143
5.11 SDIFF、SDIFFSTORE:对集合执行差集计算 144
示例:共同关注与推荐关注 146
示例:使用反向索引构建商品筛选器 149
5.12 重点回顾 152
第6章 有序集合 153
6.1 ZADD:添加或更新成员 154
6.2 ZREM:移除指定的成员 156
6.3 ZSCORE:获取成员的分值 157
6.4 ZINCRBY:对成员的分值执行自增或自减操作 158
6.5 ZCARD:获取有序集合的大小 160
6.6 ZRANK、ZREVRANK:获取成员在有序集合中的排名 161
6.7 ZRANGE、ZREVRANGE:获取指定索引范围内的成员 162
示例:排行榜 165
6.8 ZRANGEBYSCORE、ZREVRAN-GEBYSCORE:获取指定分值范围内的成员 167
6.9 ZCOUNT:统计指定分值范围内的成员数量 171
示例:时间线 172
6.10 ZREMRANGEBYRANK:移除指定排名范围内的成员 175
6.11 ZREMRANGEBYSCORE:移除指定分值范围内的成员 176
6.12 ZUNIONSTORE、ZINTERSTORE:有序集合的并集运算和交集运算 176
示例:商品推荐 181
6.13 ZRANGEBYLEX、ZREVRAN-GEBYLEX:返回指定字典序范围内的成员 182
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
示例:优化唯一计数器 195
示例:检测重复信息 196
7.4 PFMERGE:计算多个HyperLogLog的并集 198
示例:实现每周/月度/年度计数器 199
7.5 重点回顾 200
第8章 位图 201
8.1 SETBIT:设置二进制位的值 201
8.2 GETBIT:获取二进制位的值 203
8.3 BITCOUNT:统计被设置的二进制位数量 204
示例:用户行为记录器 207
8.4 BITPOS:查找第一个指定的二进制位值 208
8.5 BITOP:执行二进制位运算 211
示例:0-1矩阵 212
8.6 BITFIELD:在位图中存储整数值 214
示例:紧凑计数器 219
8.7 使用字符串命令对位图进行操作 221
8.8 重点回顾 222
第9章 地理坐标 223
9.1 GEOADD:存储坐标 224
9.2 GEOPOS:获取指定位置的坐标 224
9.3 GEODIST:计算两个位置之间的直线距离 225
示例:具有基本功能的用户地理位置程序 226
9.4 GEORADIUS:查找指定坐标半径范围内的其他位置 228
9.5 GEORADIUSBYMEMBER:查找指定位置半径范围内的其他位置 232
示例:查找附近用户 233
9.6 GEOHASH:获取指定位置的Geohash值 235
9.7 使用有序集合命令操作GEO数据 236
9.8 重点回顾 237
第10章 流 238
10.1 XADD:追加新元素到流的末尾 239
10.2 XTRIM:对流进行修剪 243
10.3 XDEL:移除指定元素 244
10.4 XLEN:获取流包含的元素数量 244
10.5 XRANGE、XREVRANGE:访问流中元素 245
10.6 XREAD:以阻塞或非阻塞方式获取流元素 251
示例:消息队列 258
10.7 消费者组 260
10.8 XGROUP:管理消费者组 264
10.9 XREADGROUP:读取消费者组中的消息 268
10.10 XPENDING:显示待处理消息的相关信息 270
10.11 XACK:将消息标记为“已处理” 271
10.12 XCLAIM:转移消息的归属权 272
10.13 XINFO:查看流和消费者组的相关信息 273
示例:为消息队列提供消费者组功能 275
10.14 重点回顾 277
第二部分 附加功能
第11章 数据库 280
第12章 自动过期 313
第13章 流水线与事务 329
第14章 Lua脚本 348
第15章 持久化 380
第16章 发布与订阅 400
第17章 模块 412
第三部分 多机功能
第18章 复制 444
第19章 Sentinel 460
第20章 集群 481