Redis数据类型

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 "test"
OK
127.0.0.1:6379> get website
"test"

在上述事例,我们使用 Redis 存储了一个键为 website,值为 test 的 string 类型数据。

使用 MSET 命令一次性存储多个值,并使用 MGET 命令查询多个 key,如下所示:

复制代码
127.0.0.1:6379> MSET name test topic Redis
OK
127.0.0.1:6379> MGET name topic
1) "test"
2) "Redis"

hash散列

hash 散列是由字符串类型的 field 和 value 组成的映射表,您可以把它理解成一个包含了多个键值对的集合。由于 Hash 类型具有上述特点,所以一般被用来存储对象。

下面使用 HMSET 命令来存储一个包含了用户基本信息的对象,如下所示:

127.0.0.1:6379> HMSET userid:1 username xiaoming password 123456 website test

OK

127.0.0.1:6379> HGETALL userid:1

  1. "username"

  2. "xiaoming"

  3. "password"

  4. "123456"

  5. "website"

  6. "test"

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

list列表

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

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

#LPUSH 列表添加元素命令

127.0.0.1:6379> LPUSH test Java

(integer) 1

127.0.0.1:6379> LPUSH test Python

(integer) 2

127.0.0.1:6379> LPUSH test C

(integer) 3

127.0.0.1:6379> LPUSH test SQL

(integer) 4

127.0.0.1:6379> LPUSH test Redis

(integer) 5

127.0.0.1:6379> LPUSH test Golang

(integer) 6

#LRANGE 查看列表元素

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

127.0.0.1:6379> LRANGE test 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 test HTML

(integer) 1

127.0.0.1:6379> SADD test Pandas

(integer) 1

127.0.0.1:6379> SADD test NumPy

(integer) 1

127.0.0.1:6379> SADD test HTML

(integer) 0

127.0.0.1:6379> SADD test HTML

(integer) 0

#SMEMBERS命令查看集合中元素,元素会无序排列

127.0.0.1:6379> SMEMBERS test

  1. "HTML"

  2. "Pandas"

  3. "NumPy"

由于 Set 集合中的成员具有唯一性,所以重复插入 HTML 元素不会成功,集合的同样可容纳 2^32 -1 个元素。

zset有序集合

Redis zset 是一个字符串类型元素构成的有序集合,集合中的元素不仅具有唯一性,而且每个元素还会关联一 个 double 类型的分数,该分数允许重复。Redis 正是通过这个分数来为集合中的成员排序。

下面通过 zadd 命令添加元素到集合,若元素存在于集合中,则不能添加成功。示例如下

127.0.0.1:6379> del test

(integer) 1

127.0.0.1:6379> zadd test 0 Python

(integer) 1

127.0.0.1:6379> zadd test 1 Java

(integer) 1

127.0.0.1:6379> zadd test 2 C++

(integer) 1

127.0.0.1:6379> zadd test 3 MySQL

(integer) 1

127.0.0.1:6379> zadd test 4 Redis

(integer) 1

#重复元素无法添加成功

127.0.0.1:6379> zadd test 4 Redis

(integer) 0

#重复分值添加成功

127.0.0.1:6379> zadd tset 4 GOLANG

(integer) 1

#查看指定成员的分值

127.0.0.1:6379> ZSCORE test Redis

"4"

查看zset中的所有成员

127.0.0.1:6379> zrange test 0 4

  1. "Python"

  2. "Java"

  3. "C++"

  4. "MySQL"

  5. "GOLANG"

  6. "Redis"

在线练习工具:Try Redis

查看更多命令:Commands | Redis

相关推荐
数据库小组6 小时前
2026 年,MySQL 到 SelectDB 同步为何更关注实时、可观测与可校验?
数据库·mysql·数据库管理工具·数据同步·ninedata·selectdb·迁移工具
华科易迅6 小时前
MybatisPlus增删改查操作
android·java·数据库
Kethy__6 小时前
计算机中级-数据库系统工程师-计算机体系结构与存储系统
大数据·数据库·数据库系统工程师·计算机中级
SHoM SSER6 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
熬夜的咕噜猫7 小时前
MySQL备份与恢复
数据库·oracle
jnrjian7 小时前
recover database using backup controlfile until cancel 假recover,真一致
数据库·oracle
lifewange7 小时前
java连接Mysql数据库
java·数据库·mysql
大妮哟8 小时前
postgresql数据库日志量异常原因排查
数据库·postgresql·oracle
还是做不到嘛\.9 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
不写八个9 小时前
PHP教程004:php链接mysql数据库
数据库·mysql·php