本书将从内部组件、外部应用和数据结构3个方面为读者介绍Redis常见、经典的用法与实例,并且所有实例均附有完整的Python代码,方便读者学习和参考。全书分3个部分:第一部分讲内部组件,介绍的实例通常用于系统内部,如缓存、锁、计数器、迭代器、速率限制器等,这些都是很多系统中不可或缺的部分;第二部分讲外部应用,介绍的实例都是一些日常常见的、用户可以直接接触到的应用,如直播弹幕、社交关系、排行榜、分页、地理位置等;第三部分讲数据结构,介绍的实例是一些使用Redis实现的常见数据结构,如先进先出队列、栈、优先队列和矩阵等。本书希望通过展示常见的Redis应用实例来帮助读者了解使用Redis解决各类问题的方法,并加深读者对Redis各项命令及数据结构的认识,使读者真正成为能够使用Redis解决各类问题的Redis专家。
本书适合对Redis有基本了解且想要进一步掌握Redis及键值数据库具体应用的技术人群,是理想的Redis技术进阶读物。
黄健宏
计算机技术图书作者和译者,关注的领域包括数据库、编程语言、操作系统,以及算法和数据结构。
他从2011年开始关注Redis,翻译过Redis文档,注释过Redis源代码,发表了大量关于Redis的文章,还撰写了广受Redis使用者喜爱的源码分析书《Redis设计与实现》,并翻译了热销的Redis入门书《Redis实战》。
他还是《Redis使用手册》的作者,《SQL实战(第2版)》、《Go语言趣学指南》和《Go Web编程》的译者。
第 一部分 内部组件
第 1章 缓存文本数据3
1.1 需求描述3
1.2 解决方案:使用字符串键缓存单项数据3
1.3 实现代码:使用字符串键缓存单项数据4
1.4 解决方案:使用JSON/哈希键缓存多项数据5
1.5 实现代码:使用JSON/哈希键缓存多项数据6
1.6 重点回顾9
第 2章 缓存二进制数据11
2.1 需求描述11
2.2 解决方案11
2.3 实现代码12
2.4 重点回顾13
第3章 锁15
3.1 需求描述15
3.2 解决方案15
3.3 实现代码16
3.4 扩展方案:带自动解锁功能的锁17
3.5 重点回顾19
第4章 带密码保护功能的锁21
4.1 需求描述21
4.2 解决方案21
4.3 实现代码22
4.4 重点回顾23
第5章 自增数字ID25
5.1 需求描述25
5.2 解决方案:使用字符串键25
5.3 实现代码:使用字符串键实现自增数字ID生成器26
5.4 解决方案:使用哈希键27
5.5 实现代码:使用哈希键实现自增数字ID生成器27
5.6 重点回顾28
第6章 计数器29
6.1 需求描述29
6.2 解决方案:使用字符串键29
6.3 实现代码:使用字符串键实现计数器30
6.4 解决方案:使用哈希键31
6.5 实现代码:使用哈希键实现计数器32
6.6 重点回顾33
第7章 唯一计数器35
7.1 需求描述35
7.2 解决方案:使用集合键35
7.3 实现代码:使用集合键实现唯一计数器36
7.4 解决方案:使用HyperLogLog键37
7.5 实现代码:使用HyperLogLog键实现唯一计数器38
7.6 重点回顾39
第8章 速率限制器41
8.1 需求描述41
8.2 解决方案41
8.3 实现代码42
8.4 重点回顾45
第9章 二元操作记录器47
9.1 需求描述47
9.2 解决方案47
9.3 实现代码48
9.4 重点回顾49
第 10章 资源池51
10.1 需求描述51
10.2 解决方案51
10.3 实现代码52
10.4 重点回顾54
第 11章 紧凑字符串57
11.1 需求描述57
11.2 解决方案58
11.3 实现代码58
11.4 重点回顾60
第 12章 数据库迭代器61
12.1 需求描述61
12.2 解决方案61
12.3 实现代码62
12.4 扩展实现:数据库采样程序64
12.5 重点回顾66
第 13章 流迭代器67
13.1 需求描述67
13.2 解决方案:使用XRANGE67
13.3 实现代码:使用XRANGE实现
流迭代器69
13.4 解决方案:使用XREAD70
13.5 实现代码:使用XREAD实现流 迭代器71
13.6 重点回顾73
第二部分 外部应用
第 14章 消息队列77
14.1 需求描述77
14.2 解决方案77
14.3 实现代码78
14.4 扩展实现:直播间弹幕系统 80
14.5 重点回顾82
第 15章 标签系统85
15.1 需求描述85
15.2 解决方案85
15.3 实现代码86
15.4 扩展实现:为根据标签查找目
标功能加上缓存88
15.5 重点回顾90
第 16章 自动补全91
16.1 需求描述91
16.2 解决方案91
16.3 实现代码92
16.4 扩展实现:自动移除冷门输入建议表94
16.5 重点回顾96
第 17章 抽奖97
17.1 需求描述97
17.2 解决方案97
17.3 实现代码98
17.4 重点回顾100
第 18章 社交关系101
18.1 需求描述101
18.2 解决方案101
18.3 实现代码102
18.4 重点回顾105
第 19章 登录会话107
19.1 需求描述107
19.2 解决方案107
19.3 实现代码108
19.4 重点回顾110
第 20章 短网址生成器111
20.1 需求描述111
20.2 解决方案111
20.3 实现代码113
20.4 扩展实现:为短网址生成器加上缓存114
20.5 重点回顾116
第 21章 投票117
21.1 需求描述117
21.2 解决方案117
21.3 实现代码119
21.4 重点回顾121
第 22章 排行榜123
22.1 需求描述123
22.2 解决方案123
22.3 实现代码124
22.4 重点回顾126
第 23章 分页127
23.1 需求描述127
23.2 解决方案127
23.3 实现代码129
23.4 重点回顾131
第 24章 时间线133
24.1 需求描述133
24.2 解决方案133
24.3 实现代码135
24.4 重点回顾138
第 25章 地理位置139
25.1 需求描述139
25.2 解决方案139
25.3 实现代码140
25.4 扩展实现:实现“摇一摇”功能142
25.5 扩展实现:为“摇一摇”功 能设置缓存143
25.6 重点回顾145
第三部分 数据结构
第 26章 先进先出队列149
26.1 需求描述149
26.2 解决方案149
26.3 实现代码150
26.4 扩展实现:反方向的队列152
26.5 重点回顾153
第 27章 定长队列和淘汰队列155
27.1 需求描述155
27.2 解决方案155
27.3 实现代码157
27.4 扩展实现:淘汰队列158
27.5 重点回顾160
第 28章 栈(后进先出队列)161
28.1 需求描述161
28.2 解决方案161
28.3 实现代码162
28.4 扩展实现:为栈添加更多方法163
28.5 重点回顾164
第 29章 优先队列165
29.1 需求描述165
29.2 解决方案165
29.3 实现代码167
29.4 扩展实现:为优先队列加上阻塞操作169
29.5 重点回顾170
第30章 循环队列171
30.1 需求描述171
30.2 解决方案171
30.3 实现代码172
30.4 扩展实现:无重复元素的循环队列174
30.5 重点回顾176
第31章 矩阵177
31.1 需求描述177
31.2 解决方案:使用列表177
31.3 实现代码:使用列表实现矩阵存储178
31.4 解决方案:使用位图180
31.5 实现代码:使用位图实现矩阵存储181
31.6 重点回顾184
第32章 逻辑矩阵185
32.1 需求描述185
32.2 解决方案185
32.3 实现代码186
32.4 扩展实现:优化内存占用188
32.5 重点回顾192