Redis系列(二):Redis的5种数据结构及其常用命令

没看过的同学可以点击以下链接查看:

Redis系列(一):Redis简介及环境安装。

本篇博客我们来讲解下Redis的5种数据结构及其常用命令,5种数据结构分别为:

字符串String

列表List

集合Set

散列Hash

有序集合ZSet

注意事项:Redis可以存储键(key)值(value)对的映射,其中键(key)一直是String,而值可以是上面提到的5种数据结构中的一种。

1. 字符串String

在Redis中,字符串可以存储以下3种类型的值:

字节串(byte string)

整数

浮点数

经常使用的字符串命令主要分为以下3种类型:

常用命令

自增自减命令

子串命令

接下来,我们一一讲解。

1.1 常用命令

常用命令主要有:GET、SET、DEL。

GET、SET、DEL命令的功能如下所示:

命令 功能
GET   获取指定键的值  
SET   设置指定键的值  
DEL   删除指定键的值  

然后我们打开一个redis-cli交互式客户端,执行下上面的命令看下效果。

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令

1.2 自增自减命令

自增自减命令主要有:INCR、DECR、INCRBY、DECRBY、INCRBYFLOAT。

当用户将一个值存储到Redis字符串的时候,如果这个值可以被转化为整数或者浮点数,那么Redis会察觉到这一点,并允许用户对这个字符串执行各种INCR*和DECR*操作。

INCR、DECR命令的功能如下所示:

命令 语法 功能
INCR   INCR keyname   将键存储的值加1  
DECR   DECR keyname   将键存储的值减1  

以下是可能存在的3个异常场景:

对一个不存在的键执行自增或者自减操作,Redis在执行操作时会将这个键的值当作0来处理。

对一个保存了空串的键执行自增或者自减操作,Redis在执行操作时会将这个键的值当作0来处理。

对一个值无法被解释为整数或者浮点数的字符串键执行自增或者自减操作,Redis将返回一个错误。

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令

Redis系列(二):Redis的5种数据结构及其常用命令

INCRBY、DECRBY命令的功能和上面的INCR、DECR命令类似,不过INCRBY、DECRBY可以指定每次自增或者自减的数值,而INCR、DECR每次都自增或者自减1。

INCRBYFLOAT命令与INCRBY命令类似,不过INCRBYFLOAT命令用来自增或者自减浮点,而INCRBY命令用来自增或者自减整数。

INCRBY、DECRBY、INCRBYFLOAT命令的功能如下所示如下所示:

命令 语法 功能
INCRBY   INCR keyname amount   将键存储的值加上整数amount  
DECRBY   DECR keyname amount   将键存储的值减去整数amount  
INCRBYFLOAT   INCRBYFLOAT keyname amount   将键存储的值加上浮点数amount  

我们可以打开一个redis-cli交互式客户端,执行上面的命令看下效果。

Redis系列(二):Redis的5种数据结构及其常用命令

1.3 子串命令

子串命令主要有:APPEND、GETRANGE、SETRANGE。

APPEND命令的功能如下所示:

命令:APPEND

语法:APPEND keyname value

功能:将值value追加到指定键keyname当前存储的值的末尾

GETRANGE命令的功能如下所示:

命令:GETRANGE

语法:GETRANGE keyname start end

功能:获取一个由偏移量start(包含start)至偏移量end(包含end)范围内所有字符组成的子串

SETRANGE命令的功能如下所示:

命令:SETRANGE

语法:SETRANGE keyname start value

功能:将从start偏移量开始的子串设置为给定值

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令

2. 列表List

Redis中的列表主要有以下2个特性:

有序地存储多个字符串

列表里面的元素是可以重复的

经常使用的列表命令主要分为以下3种类型:

常用命令

阻塞弹出命令

元素移动命令

接下来,我们一一讲解。

2.1 常用命令

常用命令主要有:RPUSH、LPUSH、RPOP、LPOP、LINDEX、LRANGE、LTRIM。

RPUSH命令的功能如下所示:

命令:RPUSH

语法:RPUSH keyname value [value ...]

功能:将一个或多个值推入列表的右端

LPUSH命令的功能如下所示:

命令:LPUSH

语法:LPUSH keyname value [value ...]

功能:将一个或多个值推入列表的左端

RPOP命令的功能如下所示:

命令:RPOP

语法:RPOP keyname

功能:移除并返回列表最右端的元素

LPOP命令的功能如下所示:

命令:LPOP

语法:LPOP keyname

功能:移除并返回列表最左端的元素

LINDEX命令的功能如下所示:

命令:LINDEX

语法:LINDEX keyname offset

功能:返回列表中偏移量为offset的元素

LRANGE命令的功能如下所示:

命令:LRANGE

语法:LRANGE keyname start end

功能:返回列表从start(包含start)偏移量到end偏移量(包含end)范围内的所有元素

LTRIM命令的功能如下所示:

命令:LTRIM

语法:LTRIM keyname start end

功能:对列表进行修剪,只保留从start(包含start)偏移量到end偏移量(包含end)范围内的元素

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令

2.2 阻塞弹出命令

阻塞弹出命令主要有:BLPOP、BRPOP。

BLPOP命令的功能如下所示:

命令:BLPOP

语法:BLPOP keyname [keyname ...] timeout

功能:从第一个非空列表中弹出最左端的元素,如果没有,则在timeout秒之内阻塞并等待可弹出的元素出现

BRPOP命令的功能如下所示:

命令:BRPOP

语法:BRPOP keyname [keyname ...] timeout

功能:从第一个非空列表中弹出最右端的元素,如果没有,则在timeout秒之内阻塞并等待可弹出的元素出现

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令

2.3 元素移动命令

元素移动命令主要有:RPOPLPUSH、BRPOPLPUSH。

RPOPLPUSH命令的功能如下所示:

命令:RPOPLPUSH

语法:RPOPLPUSH source-key dest-key

功能:从source-key列表中弹出最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这 个元素

BRPOPLPUSH命令可以认为是RPOPLPUSH命令的阻塞实现,功能如下所示:

命令:BRPOPLPUSH

语法:BRPOPLPUSH source-key dest-key timeout

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsdpy.html