Redis数据类型

7个月前 (04-27)

经过前面介绍,我们知道 Redis 是 Key-Value 类型缓存型数据库,Redis 为了存储不同类型的数据,提供了五种常用数据类型,如下所示:

  • string(字符串)

  • hash(哈希散列)

  • list(列表)

  • set()

  • zset(sorted set:有序)

注意:这里指的数据类型是 Value(值) 的数据类型,而非 key。

string字符串

String 是 Redis 最基本的数据类型。字符串是一组字节,在 Redis 数据库中,字符串具有二进制安全(binary safe)特性,这意味着它的长度是已知的,不由任何其他终止字符决定的,一个字符串类型的值最多能够存储 512 MB 的内容。

二进制安全:是一种主要用于字符串操作函数的计算机编程术语。只关心二进制化的字符串,不关心具体的字符串格式,严格的按照二进制的数据存取。这保证字符串不会因为某些操作而遭到损坏。

下面我们使用 SET 令储存一个字符串,然后使用 GET 令查看它:

127.0.0.1:6379> set website "www.biancheng网站站点" rel="nofollow" />

127.0.0.1:6379> MSET name www.biancheng网站站点" rel="nofollow" />

127.0.0.1:6379> HMSET userid:1 username xiaoming password 123456 website www.biancheng网站站点" rel="nofollow" /> Redis令执行图
图1:Redis Hash类型演示

 

上述示例中,我们是使用到了 HMSET 和 HGETALL 令,前者可以同时设置多个字段,后者用来查询全部字段。

注意:一个 Hash 中最多包含 2^32-1 个键值对。

list列表

Redis List 中的元素是字符串类型,其中的元素按照插入顺序进行排列,允许重复插入,最多可插入的元素个数为 2^32 -1 个(大约40亿个),您可以添加一个元素到列表的头部(左边)或者尾部(右边)。

下面使用 LPUSH 和 LRANGE 令对 List 数据类型进行简单演示:

#LPUSH 列表添加元素令

127.0.0.1:6379> LPUSH biancheng Java

(integer) 1

127.0.0.1:6379> LPUSH biancheng Python

(integer) 2

127.0.0.1:6379> LPUSH biancheng C

(integer) 3

127.0.0.1:6379> LPUSH biancheng SQL

(integer) 4

127.0.0.1:6379> LPUSH biancheng Redis

(integer) 5

127.0.0.1:6379> LPUSH biancheng Golang

(integer) 6

#LRANGE 查看列表元素

#最开始插入的在,插入位于个位置,和队列相似。

127.0.0.1:6379> LRANGE biancheng 0 6

1) "Golang"

2) "Redis"

3) "SQL"

4) "C"

5) "Python"

6) "Java"

注意:Redis 的列表类型同样遵循索引机制。

set

Redis Set 是一个字符串类型元素构成的无序。在 Redis 中,是通过哈希映射表实现的,所以无论是添加元素、删除元素,亦或是查找元素,它们的时间复杂度都为 O(1)。

下面通过 SADD 令添加 string 元素到 Set 中,若添加成功则返回 1,如果元素已经存在,则返回 0。示例如下:

127.0.0.1:6379> SADD www.biancheng网站站点" rel="nofollow" />

127.0.0.1:6379> del biancheng

(integer) 1

127.0.0.1:6379> zadd biancheng 0 Python

(integer) 1

127.0.0.1:6379> zadd biancheng 1 Java

(integer) 1

127.0.0.1:6379> zadd biancheng 2 C++

(integer) 1

127.0.0.1:6379> zadd biancheng 3 MySQL

(integer) 1

127.0.0.1:6379> zadd biancheng 4 Redis

(integer) 1

#重复元素无法添加成功

127.0.0.1:6379> zadd biancheng 4 Redis

(integer) 0

#重复分值添加成功

127.0.0.1:6379> zadd biancheng 4 GOLANG

(integer) 1

#查看指定成员的分值

127.0.0.1:6379> ZSCORE biancheng Redis

"4"

查看zset中的所有成员

127.0.0.1:6379> zrange biancheng 0 4

1) "Python"

2) "Java"

3) "C++"

4) "MySQL"

5) "GOLANG"

6) "Redis"

除了上述五种类型之外,Redis 还支持 HyperLogLog 类型,以及 Redis 5.0 提供的 Stream 类型。在后续章节会做相应介绍。

在线练习工具:https://try.redis.io/

查看更多令:https://redis.io/commands