1、 从零开始学 Redis 高洪涛 刘河飞 编著 内 容 简 介 Redis 数据库是目前比较热门的数据库,拥有巨大的用户量。本书主要分 3 部分讲解 Redis数据库。第一部分 Redis 初始篇,详细介绍了 Redis 的数据类型,以及 Redis 的大部分命令,并结合实际操作进行了演示。第二部分 Redis 进阶篇,深入讲解了 Redis 的客户端、服务器端、数据结构的底层,以及 Redis 的排序、事务、持久化、集群等相关功能,同时讲解了 Redis 的其他高级功能,如慢查询、流水线、地理位置、位图等,并结合实际操作,步步演示。第三部分 Redis实战篇,分别介绍了使用 Java、Spr
2、ingBoot、Python 来操作 Redis 的实例,以帮助读者更好地学习 Redis。通过阅读本书,读者可以快速掌握 Redis 的相关命令及功能用法,同时结合实战学习,可以将 Redis 熟练应用于实际的生产开发中。本书面向大多数软件开发者,如 Redis 初学者,或者具有相关后台开发经验的开发者。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 从零开始学 Redis/高洪涛,刘河飞编著.北京:电子工业出版社,2019.5 ISBN 978-7-121-36311-5.从.高 刘.数据库基本知识.TP311.138 中国版本图书馆
3、 CIP 数据核字(2019)第 068268 号 策划编辑:李 冰 责任编辑:李 冰 特约编辑:田学清 印 刷:三河市双峰印刷装订有限公司 装 订:三河市双峰印刷装订有限公司 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:787 1092 1/16 印张:24.75 字数:634 千字 版 次:2019 年 5 月第 1 版 印 次:2019 年 5 月第 1 次印刷 定 价:89.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请
4、发邮件至 ,盗版侵权举报请发邮件到 。本书咨询联系方式:。前前 言言 2016 年 10 月,在工作的过程中我偶然接触到 Redis,便开始自学,从学习 Redis 的安装,到熟悉它的数据类型及相关命令,再到它的实际应用。在企业工作的这段时间里,我也时常用到 Redis 做缓存系统,实现高并发的存储与读/写,以及 Redis 相关的高级功能,觉得非常实用。经过不断整理与总结,2018 年我决定写本书,与诸位爱好 Redis 并能实际应用 Redis 的读者进行分享。有所得,必有所失。通常我白天正常上班,晚上或周末开始撰写本书。感谢坚持不懈的自己,多少个日夜的坚持,才换来本书的完稿。在得到的同时
5、,我也失去了许多。为了完成本书的编写,我放弃了大量的休息时间,也很少锻炼身体,以致常常生病,同时变成了一个“宅男”,缺少了与人交流沟通的机会。一句话总结就是:沉迷写书,日渐消瘦。在写作本书的过程中,我深刻地体会到:做事之所以会半途而废,往往不是因为难度较大,而是因为觉得成功离我们较远。确切地说,我们不是因为失败而放弃,而是因为倦怠而失败。在人生的旅途中,我们多思考一下,多坚持一下,同时也多鼓励一下自己,一生中也许会少许多懊悔与惋惜,我们离成功也就会越来越近。在此,我希望阅读本书的读者坚持学习,不断进步。累了,就休息一下,但是不要懈怠;迷茫了,就调整一下自己努力的方向,但是不要放弃努力。既然选择
6、了,就要坚持下去,相信未来的自己一定会感谢现在努力的自己。夜已深,茶已凉,就不再多叙,望诸君谨记:学虽易,学好难,且学且珍惜。到目前为止,Redis 还在不断更新,用户量也在不断扩大,这也足以说明 Redis 的强大之处。希望诸君学习愉快,技术更上一层楼。本书内容简介 全书分 3 部分。第一部分(第 15 章)为 Redis 初始篇,首先介绍了对 NoSQL 的认识,然后介绍了 Redis环境的搭建与启动,以及它的相关客户端,最后介绍了 Redis 的数据类型命令、必备命令及 Redis数据库的相关知识。第二部分(第 613 章)为 Redis 进阶篇,首先讲解了 Redis 客户端与服务器的
7、相关属性与函数,然后结合 Redis 的底层源码深入讲解了 Redis 的底层实现和相关的 API 函数,最后讲解了 Redis 的相关功能,如排序、事务、消息订阅、持久化、集群,以及其他高级功能,如慢查询、流水线、地理位置、位图等,旨在帮助读者深入理解 Redis,并掌握其精髓。第三部分(第 1416 章)为 Redis 实战篇,这部分结合实际应用,讲解了对 Redis 数据库的操作,以 Java 语言、最流行的 SpringBoot 框架及 Python 语言为主,并提供了大量的实例代码,旨在提高读者的动手能力,帮助读者真正掌握 Redis 数据库。本书的特点 本书以模块化为主,从了解、熟
8、悉 Redis,到 Redis 的进阶学习,最后结合实际应用,为读者展示了 Redis 数据库的使用。本书前面的章节详细介绍了关于 Redis 的 200 多个命令,并结合实际操作为读者演示;后面的章节结合相关的原理图、流程图,为读者介绍了 Redis 的相关功能,如排序、事务、消息订阅、持久化、集群,以及其他高级功能,如慢查询、流水线、地理位置、位图等。最后以实际应用为主,提供了 Java、SpringBoot、Python 操作 Redis 等相关实例。致谢 首先,非常感谢张增强老师对我的肯定与支持,并给予我宽松的时间,让我得以完成本书的编写。其次,感谢坚持不懈的自己,在多少个黑夜与周末,
9、我不断地坚持,换来了此书的完稿。最后,感谢郭豪、闫凯峰等好友的帮助,在他们的支持下,我不断地向前,不断地进步着。目目 录录 第一部分 Redis 初始篇 第 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 什么是
10、 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
11、 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
12、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
13、.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 断开客户端与服
14、务器的连接.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
15、 5.3 Redis 数据库通知.121 5.3.1 数据库通知分类.122 5.3.2 数据库通知的实现原理.124 第二部分 Redis 进阶篇 第 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
16、.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