没看过的同学可以点击以下链接查看:
本篇博客我们来讲解下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交互式客户端,执行下上面的命令看下效果。
以下是这些命令的使用示例:
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将返回一个错误。
以下是这些命令的使用示例:
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交互式客户端,执行上面的命令看下效果。
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偏移量开始的子串设置为给定值
以下是这些命令的使用示例:
2. 列表ListRedis中的列表主要有以下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)范围内的元素
以下是这些命令的使用示例:
2.2 阻塞弹出命令阻塞弹出命令主要有:BLPOP、BRPOP。
BLPOP命令的功能如下所示:
命令:BLPOP
语法:BLPOP keyname [keyname ...] timeout
功能:从第一个非空列表中弹出最左端的元素,如果没有,则在timeout秒之内阻塞并等待可弹出的元素出现
BRPOP命令的功能如下所示:
命令:BRPOP
语法:BRPOP keyname [keyname ...] timeout
功能:从第一个非空列表中弹出最右端的元素,如果没有,则在timeout秒之内阻塞并等待可弹出的元素出现
以下是这些命令的使用示例:
2.3 元素移动命令元素移动命令主要有:RPOPLPUSH、BRPOPLPUSH。
RPOPLPUSH命令的功能如下所示:
命令:RPOPLPUSH
语法:RPOPLPUSH source-key dest-key
功能:从source-key列表中弹出最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这 个元素
BRPOPLPUSH命令可以认为是RPOPLPUSH命令的阻塞实现,功能如下所示:
命令:BRPOPLPUSH
语法:BRPOPLPUSH source-key dest-key timeout