Redis常用五大数据类型简介
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
Hash
Redis Hash是一个键值对集合。
Redis Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表
Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的
Zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
Redis常用命令
只记录常用命令的简单用法,详细用法请参考Redis API 文档
数据库命令
-
检查给定
key
是否存在。EXISTS key
-
返回 key 所储存的值的类型。
TYPE key
-
将
key
改名为newkey
#当且仅当 `newkey` 存在时,将覆盖旧值 RENAME key newkey #当且仅当 `newkey` 不存在时,将 `key` 改名为 `newkey` RENAMENX key newkey
-
将当前数据库的
key
移动到给定的数据库db
当中。MOVE key db
-
返回当前数据库的
key
的数量。DBSIZE
-
查找所有符合给定模式
pattern
的key
, 比如说:(KEYS *
或者KEYS h?llo
)KEYS pattern
-
清空数据库中的所有
key
。#清空当前数据库中的key FLUSHDB #清空所有数据库中的key FLUSHALL
-
切换到指定的数据库,数据库索引号
index
用数字值指定,以 0 作为起始索引值。默认使用 0 号数据库。(Redis默认有16个数据库,可以在配置文件中设置)SELECT
-
删除给定的一个或多个
key
。不存在的key
会被忽略。DEL key [key …]
-
为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
# 以秒为单位给key设置生存时间 EXPIRE key seconds # 以秒为单位设置 key 的过期 unix 时间戳 EXPIREAT key timestamp # 以毫秒为单位给key设置生存时间 PEXPIRE key milliseconds # 以毫秒为单位设置 key 的过期 unix 时间戳 PEXPIREAT key milliseconds-timestamp
-
返回给定 key 的剩余生存时间(TTL, time to live)。
# 以秒为单位返回 key 的剩余生存时间 TTL key # 以毫秒为单位返回 key 的剩余生存时间 PTTL key
-
移除给定 key 的生存时间,将这个 key 从“易失的”(带生存时间 key )转换成“持久的”(一个不带生存时间、永不过期的 key )。
PERSIST key
字符串命令
-
设置指定 key 的值
SET key value [EX seconds] [PX milliseconds] [NX|XX] # key不存在时设置key的值,相当于 SET key value NX SETNX key # 将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟,SET key value EX seconds。 SETEX key seconds value # 这个命令和 SETEX 命令相似, 但它以毫秒为单位设置 key 的生存时间,相当于 SET key value PX milliseconds 。 PSETEX key milliseconds value
从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
-
EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
-
PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
-
NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。
-
XX : 只在键已经存在时, 才对键进行设置操作。
-
-
获取指定 key 的值。
GET key
-
将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值(旧值不存在时返回
nil
)。GETSET key value
-
将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值(旧值不存在时返回
nil
)。STRLEN key
-
如果键
key
已经存在并且它的值是一个字符串, APPEND 命令将把value
追加到键key
现有值的末尾。APPEND key value
如果
key
不存在, APPEND 就简单地将键key
的值设为value
, 就像执行SET key value
一样。 -
获取存储在
key
上的值的子字符GETRANGE key start end
负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。
-
从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。(不存在的键 key 当作空白字符串处理。)
SETRANGE key offset value
-
为键 key 储存的数字值加上某个值。
# 为键 key 储存的数字值加上1 INCR key # 为键 key 储存的数字值加上增量 increment INCRBY key increment # 为键 key 储存的值加上浮点数增量 increment 。 INCRBYFLOAT key increment
如果键
key
不存在, 那么它的值会先被初始化为 0 , 然后再执行INCR
命令。如果键
key
储存的值不能被解释为数字, 那么INCR
命令将返回一个错误。 -
为键 key 储存的数字值减去某个值。
# 为键 key 储存的数字值加上1 DECR key # 为键 key 储存的数字值加上增量 increment DECRBY key increment
-
同时为多个键设置值。
MSET key value [key value …] # 当且仅当所有给定键都不存在时, 为所有给定键设置值。 MSETNX key value [key value …]
MSET
是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。 -
返回给定的一个或多个字符串键的值。
MGET key [key …]
如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值
nil
表示。
哈希命令
-
将哈希表 hash 中域 field 的值设置为 value 。
# 如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 HSET 操作。 HSET hash field value # 当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value HSETNX hash field value
如果域
field
已经存在于哈希表中, 那么它的旧值将被新值value
覆盖。 -
返回哈希表中给定域的值。
HGET hash field
-
检查给定域 field 是否存在于哈希表 hash 当中。
HEXISTS hash field
-
删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
HDEL key field [field …]
-
获取哈希表 key 中域的数量。
HLEN key
-
返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。
HSTRLEN key field
-
为哈希表 key 中的域 field 的值加上增量 increment 。
HINCRBY key field increment # 为哈希表 key 中的域 field 加上浮点数增量 increment HINCRBYFLOAT key field increment
增量也可以为负数,相当于对给定域进行减法操作。
如果
key
不存在,一个新的哈希表被创建并执行命令。如果域
field
不存在,那么在执行命令前,域的值被初始化为 0 。对一个储存字符串值的域
field
执行命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。
-
同时将多个 field-value (域-值)对设置到哈希表 key 中。
HMSET key field value [field value …]
此命令会覆盖哈希表中已存在的域。
如果
key
不存在,一个空哈希表被创建并执行 HMSET 操作。 -
返回哈希表 key 中,一个或多个给定域的值。
HMGET key field [field …]
-
返回哈希表 key 中的所有域。
HKEYS key
-
返回哈希表 key 中所有域的值。
HVALS key
-
返回哈希表 key 中,所有的域和值。
HGETALL key
-
迭代哈希表中的键值对。
HSCAN key cursor [MATCH pattern] [COUNT count]
列表命令
-
将一个或多个值 value 插入到列表
key
中。# 将一个或多个值 value 插入到列表 key 的表头 LPUSH key value [value …] # 将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。 LPUSHX key value # 将一个或多个值 value 插入到列表 key 的表尾(最右边)。 RPUSH key value [value …] # 将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。 RPUSHX key value
-
移除并返回列表 key 的元素。
# 移除并返回列表 key 的头元素 LPOP key # 移除并返回列表 key 的尾元素。 RPOP key
-
将列表
list1
中的最后一个元素(尾元素)弹出,并返回给客户端。将list1
弹出的元素插入到列表list2
,作为list2
列表的的头元素。RPOPLPUSH list1 list2
-
根据参数 count 的值,移除列表中与参数 value 相等的元素。
LREM key count value
count
的值可以是以下几种:count
> 0 : 从表头开始向表尾搜索,移除与value
相等的元素,数量为count
。count
< 0 : 从表尾开始向表头搜索,移除与value
相等的元素,数量为count
的绝对值。count
= 0 : 移除表中所有与value
相等的值。 -
返回列表 key 的长度。
LLEN key
-
返回列表 key 中,下标为 index 的元素。
LINDEX key index
index
可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 -
将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
LINSERT key BEFORE|AFTER pivot value
当 pivot 不存在于列表 key 时,不执行任何操作。
当 key 不存在时, key 被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。
-
将列表 key 下标为 index 的元素的值设置为 value 。
LSET key index value
当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。
-
返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
LRANGE key start stop
stop
也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 -
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
LTRIM key start stop
-
阻塞式(blocking)弹出命令。
# LPOP命令的阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 BLPOP key [key …] timeout # RPOP命令的阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 BRPOP key [key …] timeout # RPOPLPUSH命令的阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 BRPOPLPUSH source destination timeout
集合命令
-
将一个或多个 member 元素加入到集合 key 当中。
SADD key member [member …]
已经存在于集合的
member
元素将被忽略。假如
key
不存在,则创建一个只包含member
元素作成员的集合。当
key
不是集合类型时,返回一个错误。 -
判断 member 元素是否集合 key 的成员。
SISMEMBER key member
-
返回集合中的随机元素。
# 删除并返回集合中的一个随机元素。 SPOP key # 返回单不删除集合中的count个元素。 # 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。 # 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。 # 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。 SRANDMEMBER key [count]
-
移除集合 key 中的一个或多个 member 元素。
SREM key member [member …]
-
将
member
元素从set1
集合移动到set2
集合。SMOVE set1 set2 member
SMOVE 是原子性操作。
如果
set1
集合不存在或不包含指定的member
元素,则 SMOVE 命令不执行任何操作,仅返回 0 。当
set2
集合已经包含 member 元素时, SMOVE 命令只是简单地将set1
集合中的member
元素删除。当
set1
或set2
不是集合类型时,返回一个错误。 -
返回集合中元素的数量。
SCARD key
-
返回集合 key 中的所有成员。
SMEMBERS key
-
返回给定集合的成员。
# 返回是所有给定集合的交集。 SINTER key [key …] # 类似于 SINTER key [key …],但它将结果保存到 destination 集合,而不是简单地返回。 SINTERSTORE destination key [key …] # 返回是所有给定集合的并集。 SUNION key [key …] # 类似于 SUNION key [key …],但它将结果保存到 destination 集合,而不是简单地返回。 SUNIONSTORE destination key [key …] # 返回是所有给定集合的差集。 SDIFF key [key …] # 类似于 SDIFF key [key …],但它将结果保存到 destination 集合,而不是简单地返回。 SDIFFSTORE destination key [key …]
-
迭代集合中的值。
SSCAN key cursor [MATCH pattern] [COUNT count]
有序集合命令
-
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
ZADD key score member [[score member] [score member] …]
如果某个
member
已经是有序集的成员,那么更新这个member
的score
值,并通过重新插入这个member
元素,来保证该member
在正确的位置上。score
值可以是整数值或双精度浮点数。如果
key
不存在,则创建一个空的有序集并执行ZADD
操作。当
key
存在但不是有序集类型时,返回一个错误。 -
返回有序集 key 中,成员 member 的 score 值。
ZSCORE key member
-
为有序集 key 的成员 member 的 score 值加上增量 increment 。
ZINCRBY key increment member
可以通过传递一个负数值
increment
,让score
减去相应的值,比如ZINCRBY key -5 member
。当
key
不存在,或member
不是key
的成员时,ZINCRBY key increment member
等同于ZADD key increment member
。 -
返回有序集 key 元素的数量。
ZCARD key
-
返回有序集 key 中,指定索引区间内的成员。
# 其中成员的位置按 score 值递增(从小到大)来排序。 ZRANGE key start stop [WITHSCORES] # 成员的位置按 score 值递减(从大到小)来排列。 ZREVRANGE key start stop [WITHSCORES]
下标参数
start
和stop
都以 0 为底,也就是说,以0
表示有序集第一个成员,以1
表示有序集第二个成员,以此类推。 你也可以使用负数下标,以-1
表示最后一个成员,-2
表示倒数第二个成员,以此类推。具有相同
score
值的成员按字典序(lexicographical order )来排列。超出范围的下标并不会引起错误。 比如说,当
start
的值比有序集的最大下标还要大,或是start > stop
时,ZRANGE
命令只是简单地返回一个空列表。 另一方面,假如stop
参数的值比有序集的最大下标还要大,那么 Redis 将stop
当作最大下标来处理。可以通过使用
WITHSCORES
选项,来让成员和它的 score 值一并返回,返回列表以value1,score1, ..., valueN,scoreN
的格式表示。 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。 -
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
ZCOUNT key min max
min
和max
可以是-inf
和+inf
,这样一来,你就可以在不知道有序集的最低和最高score
值的情况下,使用ZRANGEBYSCORE
这类命令。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加
(
符号来使用可选的开区间 (小于或大于)。 -
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
# 其中成员的位置按 score 值递增(从小到大)来排序。 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] # 其中成员的位置按 score 值递增(从大到小)来排序。 ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
可选的
LIMIT
参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当offset
很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。 -
返回有序集 key 中成员 member 的排名。
# 按 score 值递增(从小到大)顺序排列。 ZRANK key member # 按 score 值递增(从大到小)顺序排列。 ZREVRANK key member
排名以
0
为底,也就是说,score
值最小的成员排名为0
。 -
移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
# 移除指定的 member ZREM key member [member …] # 移除指定排名(rank)介于start和stop区间内的所有成员。 ZREMRANGEBYRANK key start stop # 移除score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 ZREMRANGEBYSCORE key min max
-
当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。
ZRANGEBYLEX key min max [LIMIT offset count]
合法的 min 和 max 参数必须包含 ( 或者 [ , 其中 ( 表示开区间(指定的值不会被包含在范围之内), 而 [ 则表示闭区间(指定的值会被包含在范围之内)。
特殊值
+
和-
在min
参数以及max
参数中具有特殊的意义, 其中+
表示正无限, 而-
表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令ZRANGEBYLEX <zset> - +
, 命令将返回有序集合中的所有元素。
示类代码:redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g (integer) 7 redis> ZRANGEBYLEX myzset - [c 1) "a" 2) "b" 3) "c" redis> ZRANGEBYLEX myzset - (c 1) "a" 2) "b" redis> ZRANGEBYLEX myzset [aaa (g 1) "b" 2) "c" 3) "d" 4) "e" 5) "f"
-
对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。
ZLEXCOUNT key min max
-
对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。
ZREMRANGEBYLEX key min max
-
计算给定的一个或多个有序集的结果集,并将该结果集储存到 destination 。
# 计算给定的一个或多个有序集的并集,并将该并集(结果集)储存到 destination 。 ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] # 计算给定的一个或多个有序集的交集,并将该交集(结果集)储存到 destination 。 ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
其中给定 key 的数量必须以 numkeys 参数指定。
使用
WEIGHTS
选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定WEIGHTS
选项,乘法因子默认设置为 1 。使用
AGGREGATE
选项,你可以指定并集的结果集的聚合方式。默认使用的参数SUM
,可以将所有集合中某个成员的score
值之 和 作为结果集中该成员的score
值;使用参数MIN
,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数MAX
则是将所有集合中某个成员的 最大score
值作为结果集中该成员的score
值。 -
迭代有序集合中的元素(包括元素成员和元素分值)
ZSCAN key cursor [MATCH pattern] [COUNT count]