之前我们讲解了一些 RDBMS 的使用,比如 MySQL、Oracle、SQL Server 和 SQLite 等,实际上在日常工作中,我们还会接触到一些 NoSQL 类型的数据库。如果对比 RDBMS 和 NoSQL 数据库,你会发现 RDBMS 建立在关系模型基础上,强调数据的一致性和各种约束条件,而 NoSQL 的规则是“只提供你想要的”,数据模型灵活,查询效率高,成本低。但同时,相比 RDBMS,NoSQL 数据库没有统一的架构和标准语言,每种数据库之间差异较大,各有所长。
今天我们要讲解的 Redis 属于键值(key-value)数据库,键值数据库会使用哈希表存储键值和数据,其中 key 作为唯一的标识,而且 key 和 value 可以是任何的内容,不论是简单的对象还是复杂的对象都可以存储。键值数据库的查询性能高,易于扩展。
今天我们就来了解下 Redis,具体的内容包括以下几个方面:
- Redis 是什么,为什么使用 Redis 会非常快?
- Redis 支持的数据类型都有哪些?
- 如何通过 Python 和 Redis 进行交互?
Redis 是什么,为什么这么快
Redis 全称是 REmote DIctionary Server,从名字中你也能看出来它用字典结构存储数据,也就是 key-value 类型的数据。
Redis 的查询效率非常高,根据官方提供的数据,Redis 每秒最多处理的请求可以达到 10 万次。
为什么这么快呢?
Redis 采用 ANSI C 语言编写,它和 SQLite 一样。采用 C 语言进行编写的好处是底层代码执行效率高,依赖性低,因为使用 C 语言开发的库没有太多运行时(Runtime)依赖,而且系统的兼容性好,稳定性高。
此外,Redis 是基于内存的数据库,我们之前讲到过,这样可以避免磁盘 I/O,因此 Redis 也被称为缓存工具。
其次,数据结构结构简单,Redis 采用 Key-Value 方式进行存储,也就是使用 Hash 结构进行操作,数据的操作复杂度为 O(1)。
但 Redis 快的原因还不止这些,它采用单进程单线程模型,这样做的好处就是避免了上下文切换和不必要的线程之间引起的资源竞争。
在技术上 Redis 还采用了多路 I/O 复用技术。这里的多路指的是多个 socket 网络连接,复用指的是复用同一个线程。采用多路 I/O 复用技术的好处是可以在同一个线程中处理多个 I/O 请求,尽量减少网络 I/O 的消耗,提升使用效率。
Redis 的数据类型
相比 Memcached,Redis 有一个非常大的优势,就是支持多种数据类型。Redis 支持的数据类型包括字符串、哈希、列表、集合、有序集合等。
字符串类型是 Redis 提供的最基本的数据类型,对应的结构是 key-value。
如果我们想要设置某个键的值,使用方法为set key value
,比如我们想要给 name 这个键设置值为 zhangfei,可以写成set name zhangfei
。如果想要取某个键的值,可以使用get key
,比如想取 name 的值,写成 get name 即可。
哈希(hash)提供了字段和字段值的映射,对应的结构是 key-field-value。
如果我们想要设置某个键的哈希值,可以使用hset key field value
,如果想要给 user1 设置 username 为 zhangfei,age 为 28,可以写成下面这样:
|
|
|