持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
实际开发中使用频繁的非关系型数据库 Redis。Redis 是完全开源免费的,遵守 BSD(Berkeley Software Distribution) 协议,是一个高性能的 key-value 的非关系型数据库,在实际项目开发中被大量使用。
Redis 简介
Redis 全称是:REmote DIctionary Service,即远程字典服务。Redis 是一个开源的(遵守 BSD 协议),内存中的数据结构存储系统。由于 Redis 的数据存储在内存中,所以读写速度非常快,因为其也被用于缓存方向。除此之外,Redis 提供了多种数据类型来支持不同的业务场景。
Redis 与其他 key-value 产品相比,有以下几个特点:
- Redis 支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis 不仅仅支持简单的 key-value 类型的数据库,同时还提供了多种类型的数据结构,比如:list(列表)、set(集合)、zset(有序集合)、hash(散列) 等数据结构存储。
- Redis 支持数据的备份,即 master-slave 模式的数据备份。
Redis 优势
Redis 相比之下其他 key-value 数据库的优势如下:
-
性能极高
因为 Redis 是基于内存的数据存储系统,其读的速度是 110000 次/s,写的速度是 81000 次/s。
-
丰富的数据类型
Redis 支持字符串(strings)、散列(hashes)、列表(lists)、 集合(sets)、有序集合(sorted sets) 等操作;也支持一些范围查询,比如 bitmaps、hyperloglogs 和地理空间(geospatial)索引半径查询等操作。
-
原子性操作
Redis 的所有操作都是原子性的,即要么成功执行要么失败完全不执行。Redis 中的单个操作是原子性的;而多个操作也支持事务,即原子性,可以通过
MULTI和EXEC指令包起来。✨ 说明:在执行
MULTI命令之后,此时将进入阻塞状态。当我们继续发送命令时,命令不会立即执行,而是会排队等待。直到输出EXEC命令执行,队列中的命令才会一一执行 -
Redis 还支持发布订阅(publish/subscribe) 模式、通知、key 过期、分布式锁等特性。
不同的数据类型
Redis 支持 5 种数据类型,分别是:strings(字符串),hashs(哈希),lists(列表),sets(集合),zsets(sorted set:有序集合)。
下面我们先来简单认识一下这 5 种数据类型:
-
strings(字符串)
-
string 是 Redis 最基本的数据类型,一个 key 对应一个 value。
-
string 是二进制安全的,换句话说 Redis 的 string 可以包含任何数据,比如图片或者序列化对象等。
-
string 类型是 redis 最基本的数据类型,string 类型的值最大能存储 512 MB。
-
图解下图所示 👇:
✨ 其中:
set是用来新增的,get是用来获取的。
-
-
lists(列表)
-
Redis 中的列表是简单的字符串列表,按照插入的顺序排序。我们向列表的左边或者右边添加元素。
-
图解下图所示:
✨ 说明:list 就是一个简单的字符串集合,list 内的元素是可以重复的。
rpush是用来新增的,lrange是用来获取的。lrange lq2 0 -1中 0 表示从第一个元素开始,-1 表示最后一个元素,即将集合lq2中所有的元素都查询出来。
-
-
sets(集合)
-
Redis 中的 set 是字符串类型的无序集合。其是通过哈希表实现的,因此添加、删除、查找的复杂度都是 O(1)。
-
图解如下图所示 👇:
✨ 说明:set 和 list 一样都是字符串类型的集合,但 set 内的元素是不可以重复的,并且是无序的。
sadd是用来新增的,smembers是用来查询的。
-
-
zsets(sorted set:有序集合)
-
zset 每个元素都会关联一个 double 类型的分数。Redis 通过分数来为集合中的成员进行从小到大的排序。其中 zset 元素是唯一的,但是分数可以重复。
-
图解如下图所示 👇:
✨ 说明:zset 和 set 一样都是字符串类型元素的集合,其集合内元素不能重复,但是每一个元素会关联一个分数(此分数可以重复),其就是按照分数来对元素进行从小到大排序的。
zadd是用来新增的,zrange是用来查询的。zadd lq4 456 111中的 456 是分数, 111 是具体的元素;zrange lq4 0 -1 withscores中的 0 表示第一个元素,-1 表示最后一个元素,withscores表示将元素关联的分数也查询出来(可选)。
-
-
hashs(哈希)
-
hash 也是一个键值对集合。其是一个 string 类型的 key 和 value 的映射表,特别适合用于存储对象。可以将 hash 集合看成多个 key-value 键值对。
-
图解如下图所示 👇:
✨ 说明:hash 集合中可以看成是多个键值对。
hset是用来新增的,hgetall是用来查询所有的键值对的,hget是用来根据 key 查询 value 的。
-