前言

我们应该怎样学习 Redis,大部分网上的教程从安装部署、介绍 API 开始,字符串、列表、集合等等。然后是发布订阅、持久化,再到主从复制,集群部署。这样的好处是我们能立刻掌握一个具体的知识点,甚至能马上解决一些现实业务场景中遇到的问题,但是这样我们也很容易陷入一些具体的技术细节中,忘记本来学习的目的。

系统学习法

在学习一个新知识点时,我们首先要站在全局的角度看待它,对这个知识点的总体架构和关键模块有清晰的认知,了解它的系统脉络,然后深入到每个具体的技术点,学完一个知识点后再回头看系统架构,理解这个知识点在系统中的作用和地位,分析它和其它模块的联系和不同点。我把这种学习法叫做系统学习法。

我们学习 Redis 也可以用系统学习法,我们在遇到和解决实际问题的时候,分析出问题点所属模块,按照系统中各模块的关联关系,能更快定位到问题出现的原因,更快解决问题。当然,我们还可以把系统学习法用到学习其他知识点中,让学习事半功倍。

键值数据库

我们都知道 Redis 是一个键值数据库,它具有键值数据库都有的特性,所以我们可以通过剖析一个最简单的键值数据库 simpleKV 来学习 Redis。simpleKV 是我们虚拟的,并不是真正存在。我们可以把 simpleKV 看成 Redis 和 Memcached 这类键值数据库的共有特点的本质抽象,比方说 simpleKV 就是 Java 的类,Redis/Memcached 就是 Java 类实例化后的对象。

我们都知道关系型数据库 Mysql,它的核心功能就是存储和操作数据,也就是数据模型和操作接口。simpleKV 也是数据库,数据模型和操作接口是我们理解 Redis 的应用场景的重要基础,基础牢固,万丈高楼才能平地而起。

在存储用户信息(用户 ID、姓名、年龄、性别等)通常用关系型数据库保存,建立一个用户表,ID 做主键,姓名、年龄、性别等多列字段,一个用户就是一行数据。我们也可以用键值数据库存储,用户 ID 作为 Key,用户信息作为 Value。

当我们要对多个用户进行性别分组统计时,键值数据库就无法做到,它只提供简单操作接口,不支持复杂的聚合计算。

数据模型

键值数据库的基本数据模型是 key-value 模型,simpleKV 中,key 是 string 类型,value 可以是任意基本数据类型,例如字符串、整型。

键值数据库支持的 key 类型普遍都是 string,而 value 类型不同键值数据库有很大差别。Memcached 的 Value 只支持 String 类型,Redis 的 Value 支持包括字符串、哈希、列表、有序集合、无序集合等。

从使用的角度来说,不同 value 类型的实现,不仅可以支撑不同业务的数据需求,而且也隐含着不同数据结构在性能、空间效率等方面的差异,从而导致不同的 value 操作之间存在着差异。

我们在进行键值数据库的技术选型时,一个重要的考虑元素就是它支持的 value 类型。

Redis 之所以能在各类不同的业务场景中广泛使用,就是因为它支持各种不同类型的 value。

总结

  1. 今天我们简单介绍了系统学习法的原理和作用,后续 Redis 的学习我们将按照系统学习法的方式学习,提升学习效率
  2. 我们还学习了键值数据库关键功能数据模型和操作接口,了解不同键值数据库的数据模型的作用和意义,下节我们会继续以 simpleKV 作为示例详细学习键值数据库