本书围绕高并发大数据的项目需求,全面讲述分布式缓存组件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如何构建微服务应用。
高并发大数据已经成为当前软件项目的普遍需求,而Redis组件在该类项目中扮演了越来越重要的角色,对这一点广大程序员应当深有体会:哪怕是软件专业的毕业生,在面试时多少也会被问及这方面的问题。掌握Redis及其在项目中的使用成为Java程序员的重要技能。
在学习Redis时,读者首先会遇到搭建环境的问题。项目里Redis以及Redis集群一般是部署在Linux系统上的,和Redis整合的其他数据库组件(比如MySQL集群和MyCAT分库分表组件)一般也是安装部署在Linux系统上,但是读者学习所用的计算机大多是Windows系统。对此,本书首先在Windows系统上安装Docker,模拟Linux环境,并在Docker容器里搭建Redis等组件的开发运行环境,让读者边敲代码边学习,以便真正学会Redis及开发技能。
在解决环境问题后,就会面临学什么的问题。对此,本书针对大多数项目对Redis的普遍需求,首先通过案例介绍Redis数据结构和Redis常用命令等基本技能,随后围绕高并发大数据的需求讲述基于Redis集群 MySQL集群 MyCAT分库分表组件的数据库层面应对高并发请求的解决方案。
虽然说这些技术点看上去很高深,而且读者有可能是次接触,但是在本书里会给出搭建环境和运行代码的详细步骤,范例通俗易懂,所以读者不必担心。
在实际项目里,Redis等数据库组件一般是同Spring Boot微服务组件整合使用的,所以本书以秒杀等案例详细给出Redis同Spring Boot以及Eureka、Ribbon等Spring Cloud全家桶组件整合的相关技巧。这样大家在看完本书以后不仅能掌握Redis本身的相关技能,还能站在微服务架构的高度上掌握在Spring微服务系统里整合使用Redis的技能。
本书涉及的源代码和视频教学文件可以从华章网站(www.hzbook.com)下载(搜索到本书以后单击资料下载按钮,即可在本书页面上的扩展资源模块找到配套资源下载链接)。若下载有问题,请发送电子邮件到booksaga@126.com,邮件主题为基于Docker的Redis入门与实战。
本书在编写过程中得到了夏非彼和王金柱两位老师的大力支持,在此表示感谢。
虽然编者在写这本书的时候处处留意,字字斟酌,但是限于水平,疏漏之处在所难免,恳请相关技术专家和读者不吝指正。
编 者
2021年6月
前言
第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