Day768.大佬推荐的经典的Redis学习资料 -Redis 核心技术与实战

article/2025/11/2 13:05:14

大佬推荐的经典的Redis学习资料

Hi,我是阿昌,今天学习记录的是关于经典的Redis学习资料

一、经典书籍

在学习 Redis 时,最常见的需求有三个方面。

  • 日常使用操作:比如常见命令和配置,集群搭建等;
  • 关键技术原理:比如我们介绍过的 IO 模型、AOF 和 RDB 机制等;
  • 在实际使用时的经验教训,比如,Redis 响应变慢了怎么办?Redis 主从库数据不一致怎么办?等等。

1、工具书:《Redis 使用手册》

一本好的工具书,可以帮助快速地了解或查询 Redis 的日常使用命令和操作方法。

《Redis 使用手册》,就是一本非常好用的工具书。

在这本书中,作者把 Redis 的内容分成了三大部分,分别是“数据结构与应用”“附加功能”和“多机功能”。

其中,最有用的就是“数据结构与应用”的内容,因为它提供了丰富的操作命令介绍,不仅涵盖了 Redis 的 5 大基本数据类型的主要操作命令,还介绍了 4 种扩展数据类型的命令操作,包括位图、地址坐标、HyperLogLog 和流。

只要这本书在手边,就能很轻松地了解和正确使用 Redis 的大部分操作命令了。

不过,如果想要了解最全、最新的 Redis 命令操作,建议你把 Redis 的命令参考网站收录到你的浏览器书签中,随用随查。

目前,Redis 官方提供的所有命令操作参考肯定是最全、最新的,建议优先使用这个官方网站。在这个网页上查找命令操作非常方便,我们既可以通过命令操作的名称直接查找,也可以根据 Redis 的功能,分类查找对应功能下的操作,例如和集群相关的操作,和发布订阅相关的操作。

中文版,提供一个翻译版的命令参考。

除了提供 Redis 的命令操作介绍外,《Redis 使用手册》还提供了“附加功能”部分,介绍了 Redis 数据库的管理操作和过期 key 的操作,这对我们进行 Redis 数据库运维(例如迁移数据、清空数据库、淘汰数据等)提供了操作上的指导。

有了工具手册,就能很轻松地掌握不同命令操作的输入参数、返回结果和复杂度了。

2、原理书:《Redis 设计与实现》

虽然《Redis 设计与实现》和《Redis 使用手册》是同一个作者写的,但是它们的侧重点不一样,这本书更加关注 Redis 关键机制的实现原理

介绍 Redis 原理的资料有很多,这本书讲解得非常透彻,尤其是在 Redis 底层数据结构、RDB 和 AOF 持久化机制,以及哨兵机制和切片集群的介绍上,非常容易理解,建议重点学习下这些部分的内容。

除了文字讲解,这本书还针对一些难点问题,例如数据结构的组成、哨兵实例间的交互过程、切片集群实例的交互过程等,都使用了非常清晰的插图来表示,可以最大程度地降低学习难度。

3、实战书:《Redis 开发与运维》

在实战方面,《Redis 开发与运维》是一本不错的参考书。

首先,它介绍了 Redis 的 Java 和 Python 客户端,以及 Redis 用于缓存设计的关键技术和注意事项,这些内容在其他参考书中不太常见,你可以重点学习下。

其次,它围绕客户端、持久化、主从复制、哨兵、切片集群等几个方面,着重介绍了在日常的开发运维过程中遇到的问题和“坑”,都是经验之谈,可以帮助你提前做规避。

另外,这本书还针对 Redis 阻塞、优化内存使用、处理 bigkey 这几个经典问题,提供了解决方案,非常值得一读。

在阅读的时候,可以把目录里的问题整理一下,做成列表,这样,在遇到问题的时候,就可以对照着这个列表,快速地找出原因,并且利用书中的方案去解决问题了。

当然,要想真正提升实战能力,光读书是远远不够的,毕竟,“纸上得来终觉浅”。

两条建议。

  • 阅读源码。读源码其实也是一种实战锻炼,可以帮助你从代码逻辑中彻底理解 Redis 系统的实际运行机制,当遇到问题时,可以直接从代码层面进行定位、分析和解决问题。阅读 Redis 源码,最直接的材料就是 Redis 在 GitHub 上的源码库。另外,有一个网站提供了 Redis 3.0 源码的部分中文注释,你也可以参考一下。

  • 亲自动手实践。“没有服务器无法实践”,其实,Redis 运行后本身就是一个进程,是可以直接使用自己的电脑进行部署的。只要不是性能测试,在功能测试或者场景模拟上,自己电脑的环境一般都是可以胜任的。比如说,要想部署主从集群或者切片集群,模拟主库故障,我们完全可以在自己电脑上起多个 Redis 实例来完成,只要保证它们的端口号不同,就可以了。好了,关于 Redis 本身的书籍的推荐,就先告一段落了,接下来,我想再给你分享一些扩展内容。


二、扩展阅读方向

Redis 的很多关键功能,其实和操作系统底层的实现机制是相关的,比如说,非阻塞的网络框架、RDB 生成和 AOF 重写时涉及到的 fork 和写时复制机制,等等。

另外,Redis 主从集群中的哨兵机制,以及切片集群的数据分布还涉及到一些分布式系统的内容。

一张图片,展示一下 Redis 的关键机制和操作系统、分布式系统的对应知识点。

在这里插入图片描述

AOF 日志的刷盘时机和操作系统的 fsync 机制、高速页缓存的刷回有关,而网络框架跟 epoll 有关,RDB 生成和 AOF 重写与 fork、写时复制有关

此外,哨兵选主过程,其实是分布式系统中的经典的 Raft 协议的执行过程,如果你比较了解 Raft 协议,就能很轻松地掌握哨兵选主的运行机制了。

切片集群的 Redis Cluster 方案,其实,业界还有一种实现方案,就是 ShardedJedis,而它就用到了分布式系统中经典的一致性哈希机制。

所以,如果说你希望自己的实战能力能够更强,建议你读一读操作系统分布式系统方面的经典教材,比如《操作系统导论》。

尤其是这本书里对进程、线程的定义,对进程 API、线程 API 以及对文件系统 fsync 操作、缓存和缓冲的介绍,都是和 Redis 直接相关的;

再比如,《大规模分布式存储系统:原理解析与架构实战》中的分布式系统章节,可以让你掌握 Redis 主从集群、切片集群涉及到的设计规范。

了解下操作系统和分布式系统的基础知识,既能帮你厘清容易混淆的概念(例如 Redis 主线程、子进程),也可以帮助将一些通用的设计方法(例如一致性哈希)应用到日常的实践中,做到融会贯通,举一反三。


三、总结

三本参考书,分别对应了 Redis 的命令操作使用关键机制的实现原理,以及实战经验,还介绍了 Redis 操作命令快速查询的两个网站,这可是日常使用 Redis 的必备工具,可以提升你使用操作 Redis 的效率。

另外,对于 Redis 关键机制涉及到的扩展知识点,从操作系统和分布式系统两个方面进行了补充。


如果觉得这些书读起来困难,推荐一本《Redis 深度历险:核心原理与应用实践》,这本书很薄,而且最大的特点是讲解接地气,它可以让你对Redis的基础使用、业务场景、原理分析有一个基本的认识和了解,作为入门和进阶非常合适,起码可以让重新树立起深入学习Redis的信心。

另外,真心建议大家试着去读一下Redis源码,没有想象的那么难,而且Redis的代码质量非常高,由于是单线程的内存数据库,没有多线程运行时的复杂逻辑,读起来非常顺畅!



http://chatgpt.dhexx.cn/article/OaH9RASh.shtml

相关文章

qt QSettings

qt QSettings 用法总结 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现。 …

QT中使用QSettings保存应用程序配置信息

一、问题描述 今天遇到一个问题,就是想实现一个软件,我上一次开启软件时候配置的IP地址以及,打开的文件路径,能够在我下一次打开软件时候自动写入上一次配置的信息,不需要再重新设置配置了。 二、解决方法 使用QT中的…

QSettings用法(例子)

用户通常打开程序,希望每次打开程序都能记住跨会话设置,比如(窗口的大小位置,选项等); 窗口打开如果没有记住上次打开的记录,每次关闭它都会重复在同样位置同样大小,好比如手机格式化&#xff…

Qt使用QSettings读写ini文件

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 QSettings 简介 QSettings 类提供了ini文件读写,注册表读写的功能 QSettings::Format有两种: QSettings::NativeFormat 在…

QSettings读写ini文件

QSettings简介 QSettings类提供了持久的独立于平台的应用程序设置。 用户通常希望应用程序能够跨会话记住它的设置(窗口大小和位置,选项等)。在Windows上,这些信息通常存储在系统注册表中,在macOS和iOS上则存储在属性列表文件中。在Unix系统…

Qt中使用QSettings读取配置文件注意事项

QSetting使用中的注意事项 QSetting为Windows、Linux和MacOS系统提供了统一的配置文件/注册表读取方式。 (引用QtHelp的一句话:The QSettings class provides persistent platform-independent application settings.) 但是在读取配置文件时…

QT 程序参数保存-QSettings类

背景: 程序需要设置参数保存在本地,下次一次打开时参数为上次设置的值,不会被重新初始化。 QSettings类 实现步骤 1 新建paraConfig类 1.1 paraConfig方法中传入文件名参数fileName 1.2 在程序目录下新建一个CFG文件夹,&…

QT中QSettings的使用

首先包含头文件 #include<QSettings>QSettings的使用 QSettings m_iniFile("test.ini", QSettings::IniFormat);m_iniFile.beginGroup("USERCONFIG");m_iniFile.setValue("userName", ui->Edt_user->text());m_iniFile.setValue(&q…

Qt如何用QSettings读写ini配置文件

一、ini文件的格式 ini文件的格式如下&#xff0c;主要是由节、键、值来组成。 [section1] age23 namlcm sexman[section2] age75 namelucimer sexman……………… [sectionN] // 节名 键 值 ……………… 键 值二、ini配置文件的写入 ini文件的读取和写入都是…

QSettings Class

QSettings类 QSettings类公共类型&#xff08;枚举&#xff09;公有成员函数静态成员函数函数作用这个类写文件的特征 QSettings类 QSettings类提供持久的独立于平台的应用程序设置。 头文件:#include< QSettings >qmake:QT core继承&#xff08;父&#xff09;:QObje…

Qt读写配置文件之QSettings的用法

主要是在开发中&#xff0c;将一些关键的东西写入或者读取配置文件中&#xff0c;本文主要就是使用了QSettings的setValue和value。 QSettings可以存储一系列设置。每个设置包括指定设置名称&#xff08;键&#xff09;的一个字符串和一个与该键关联的QVariant存储数据。使用se…

Qt之QSettings的使用

一.前言 软件开发中&#xff0c;有这样的需求&#xff1a;用户需要动态配置参数加载到软件界面&#xff0c;以及保存软件的一些状态值&#xff0c;这就需要将数据保存下来然后读取解析,针对这样的需求&#xff0c;可以有两种方式&#xff0c;一种就是自己定义数据格式&#xff…

QSettings 用法总结(很好用)

QSettings 用法总结&#xff08;很好用&#xff09; 用户对应用程序经常有这样的要求&#xff1a;要求它能记住它的settings&#xff0c;比如窗口大小&#xff0c;位置&#xff0c;一些别的设置&#xff0c;还有一个经常用的&#xff0c;就是recent files&#xff0c;等等这些都…

Qt:QSettings类

QSettings类提供了与平台无关的持久性应用程序设置 头文件&#xff1a; #include <QSettings>cmake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)qmake: QT corecmake: QObject注意&#xff1a;此类中的所有函数都是…

QSettings

一、描述 用户通常希望应用程序能够记住其跨会话的设置&#xff08;窗口大小和位置、选项等&#xff09;。 此信息通常存储在 Windows 上的系统注册表中&#xff0c;以及 macOS 和 iOS 上的属性列表文件中。在 Unix 系统上&#xff0c;由于没有标准&#xff0c;许多应用程序使…

Http状态码大全(200、404、500等)

基本涵盖了所有问题 HTTP 400 – 请求无效 HTTP 401.1 – 未授权&#xff1a;登录失败 HTTP 401.2 – 未授权&#xff1a;服务器配置问题导致登录失败 HTTP 401.3 – ACL 禁止访问资源 HTTP 401.4 – 未授权&#xff1a;授权被筛选器拒绝 HTTP 401.5 – 未授权&#xff1a;ISAP…

状态码中400错误和405错误怎么解决

1.400这个问题就是你请求的参数 和你服务器可以处理的这个参数不匹配 解决的方法就是向RequestParam(required false)括号里添加requiredfalse这个条件&#xff0c;表示可以接受请求参数&#xff0c;也可以不接受请求参数。 2.405错误就是你请求的方式和服务器可以请求的方式…

500状态码

500状态码 前言 前几天运行项目前端页面找不到js文件 报错406 一、出现500状态码空指针异常 服务器遇到了一个未曾预料的状况&#xff0c;导致了它无法完成对请求的处理。一般来说&#xff0c;这个问题都会在服务器端的源代码出现错误时出现&#xff0c;不只是空指针&#…

HTTP Status 400 (HTTP400状态码)

异常信息记录_2019-11-16 HTTP Status 400 – 错误的请求 前两天写了一个关于时间格式转换的400错误的请求的博客&#xff0c;给公司的大佬看了一下&#xff0c;被吐槽……特此修改一下。 1、问题分析 HTTP 400的状态码&#xff0c;可以统称前后台对应不上&#xff0c;主要有…

js代码实现点击按钮出现60秒倒计时

比如&#xff0c;一些网站上的手机短信认证的功能&#xff0c;有类似实现点击按钮后&#xff0c;倒计时60秒才能再次点击发送的效果。 此例子用Javascript实现点击按钮后&#xff0c;倒计时60秒才能再次点击发送验证码的功能。 例子1&#xff1a;Javascript 实现 点击按钮 倒…