上一篇博客,咱们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法,redis
没看过的同窗能够点击如下连接查看:数据结构
本篇博客咱们来说解下Redis的5种数据结构及其经常使用命令,5种数据结构分别为:3d
注意事项:Redis能够存储键(key)值(value)对的映射,其中键(key)一直是String,而值能够是上面提到的5种数据结构中的一种。code
在Redis中,字符串能够存储如下3种类型的值:cdn
常常使用的字符串命令主要分为如下3种类型:blog
接下来,咱们一一讲解。字符串
经常使用命令主要有:GET、SET、DEL。get
GET、SET、DEL命令的功能以下所示:源码
命令 | 功能 |
---|---|
GET | 获取指定键的值 |
SET | 设置指定键的值 |
DEL | 删除指定键的值 |
而后咱们打开一个redis-cli交互式客户端,执行下上面的命令看下效果。
如下是这些命令的使用示例:
自增自减命令主要有:INCR、DECR、INCRBY、DECRBY、INCRBYFLOAT。
当用户将一个值存储到Redis字符串的时候,若是这个值能够被转化为整数或者浮点数,那么Redis会察觉到这一点,并容许用户对这个字符串执行各类INCR*
和DECR*
操做。
INCR、DECR命令的功能以下所示:
命令 | 语法 | 功能 |
---|---|---|
INCR | INCR keyname | 将键存储的值加1 |
DECR | DECR keyname | 将键存储的值减1 |
如下是可能存在的3个异常场景:
如下是这些命令的使用示例:
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交互式客户端,执行上面的命令看下效果。
子串命令主要有: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中的列表主要有如下2个特性:
常常使用的列表命令主要分为如下3种类型:
接下来,咱们一一讲解。
经常使用命令主要有: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)范围内的元素
如下是这些命令的使用示例:
阻塞弹出命令主要有:BLPOP、BRPOP。
BLPOP命令的功能以下所示:
命令:BLPOP
语法:BLPOP keyname [keyname ...] timeout
功能:从第一个非空列表中弹出最左端的元素,若是没有,则在timeout秒以内阻塞并等待可弹出的元素出现
BRPOP命令的功能以下所示:
命令:BRPOP
语法:BRPOP keyname [keyname ...] timeout
功能:从第一个非空列表中弹出最右端的元素,若是没有,则在timeout秒以内阻塞并等待可弹出的元素出现
如下是这些命令的使用示例:
元素移动命令主要有:RPOPLPUSH、BRPOPLPUSH。
RPOPLPUSH命令的功能以下所示:
命令:RPOPLPUSH
语法:RPOPLPUSH source-key dest-key
功能:从source-key列表中弹出最右端的元素,而后将这个元素推入dest-key列表的最左端,并向用户返回这 个元素
BRPOPLPUSH命令能够认为是RPOPLPUSH命令的阻塞实现,功能以下所示:
命令:BRPOPLPUSH
语法:BRPOPLPUSH source-key dest-key timeout
功能:从source-key列表中弹出最右端的元素,而后将这个元素推入dest-key列表的最左端,并向用户返回这 个元素,若是source-key为空,那么在timeout秒以内阻塞并等待可弹出的元素出现
如下是这些命令的使用示例:
Redis的集合以无序的方式来存储多个各不相同的元素。
与上面提到的列表相比,Redis中的集合主要有如下2个特性:
常常使用的集合命令主要分为如下3种类型:
接下来,咱们一一讲解。
经常使用命令主要有:SADD、SMEMBERS、SISMEMBER、SREM、SCARD。
以上命令的功能描述以下所示:
命令 | 语法 | 功能 |
---|---|---|
SADD | SADD keyname item [item ...] | 将一个或多个元素添加到集合 |
SMEMBERS | SMEMBERS keyname | 返回集合包含的全部元素 |
SISMEMBER | SISMEMBER keyname item | 检查元素item是否存在于集合keyname中 |
SREM | SREM keyname item [item ...] | 从集合里删除一个或多个元素 |
SCARD | SCARD keyname | 返回集合包含元素的数量 |
如下是这些命令的使用示例:
元素移动命令主要有:SMOVE。
以上命令的功能描述以下所示:
语法:SMOVE sourcekey destkey item
功能:将集合sourcekey中的元素item移除,并将元素item添加到集合destkey中
若是item被成功移除,返回1,不然返回0
如下是SMOVE命令的使用示例:
交集/并集/差集命令主要有:SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE。
以上命令的功能描述以下所示:
命令 | 语法 | 功能 |
---|---|---|
SDIFF | SDIFF keyname [key-name ...] | 返回存在于第1个集合,不存在于其余集合的元素(差集运算) |
SDIFFSTORE | SDIFFSTORE destkey keyname [key-name ...] | 将存在于第1个集合,不存在于其余集合的元素(差集运算)存储到destkey集合 |
SINTER | SINTER keyname [key-name ...] | 返回同时存在于全部集合中的元素(交集运算) |
SINTERSTORE | SINTERSTORE destkey keyname [key-name ...] | 将同时存在于全部集合中的元素(交集运算)存储到destkey集合 |
SUNION | SUNION keyname [key-name ...] | 返回至少存在于一个集合中的元素(并集运算) |
SUNIONSTORE | SUNIONSTORE destkey keyname [key-name ...] | 将至少存在于一个集合中的元素(并集运算)存储到destkey集合 |
如下是这些命令的使用示例:
关于数据结构Hash,有些书籍叫作散列,有些书籍叫作哈希,本文中使用名称:散列。
Redis的散列能够存储多个键值对之间的映射,便可以让用户将多个键值对存储到一个Redis键里面,以下所示:
接下来,咱们了解下常常使用的散列命令。
往散列里添加键值对有2个命令,分别是HSET、HMSET,其中HSET一次只能添加1个键值对,而HMSET一次能够添加多个键值对。
如下是这2个命令的使用示例:
此时的hash-key包含3个键值对,以下所示:
获取散列里键值对有如下5个命令:
如下是这5个命令的使用示例:
能够经过HLEN
命令来获取散列包含的键值对数量。
如下是HLEN
命令的使用示例:
能够经过HEXISTS
命令来检查某个键是否存在于散列中。
如下是HEXISTS
命令的使用示例:
和字符串的自增,自减命令功能相似,在散列里,咱们可使用HINCRBY
命令将某个键存储的值加上个整数,使用HINCRBYFLOAT
命令将某个键存储的值加上个浮点数。
如下是这2个命令的使用示例:
能够经过HDEL
命令来删除散列中的一个或多个键。
如下是HDEL
命令的使用示例:
有序集合和散列同样,能够用于存储多个键值对之间的映射,其中有序集合的键被称为成员(member),每一个成员都是各不相同的,有序集合的值被称为分值(score),分值必须为浮点数。
下图表示1个包含2个元素的有序集合示例:
接下来,咱们了解下常常使用的有序集合命令。
能够经过ZADD
命令往有序集合中添加元素。
如下是ZADD
命令的使用示例:
此时的zset-key包含3个成员与分值之间的映射,以下所示:
获取有序集合里元素有如下2个命令:
ZRANGE
语法:ZRANGE keyname start stop [WITHSCORES]
功能:返回有序集合中排名介于start和stop之间的成员,若是给定了可选的WITHSCORES选项,
那么会将成员的分值一并返回
ZRANGEBYSCORE
语法:ZRANGEBYSCORE keyname min max [WITHSCORES] [LIMIT offset count]
功能:返回有序集合中分值介于min和max之间的成员,若是给定了可选的WITHSCORES选项,
那么会将成员的分值一并返回
如下是这2个命令的使用示例:
能够经过ZCARD
命令来获取有序集合包含的成员数量。
如下是ZCARD
命令的使用示例:
还能够经过ZCOUNT命令来获取有序集合中分值处于某个区间的成员数量。
如下是ZCOUNT
命令的使用示例:
和字符串的自增,自减命令功能相似,在有序集合里,咱们可使用ZINCRBY
命令将某个成员的分值加上个整数。
如下是这ZINCRBY
命令的使用示例:
能够经过ZREM
命令来删除有序集合中的一个或多个成员。
如下是ZREM
命令的使用示例:
若是想了解更多的Redis命令,能够查看官网地址:redis.io/commands。
Josiah L. Carlson 《Reids实战》