Redis命令2

Redis 哈希(Hash)相关命令

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

Redis hset命令

用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。可用版本>= 2.0.0

语法

hset key field1 value1 [field2 value2 ]

返回值

如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。

Redis hsetnx命令

用于为哈希表中不存在的的字段赋值。如果哈希表不存在,一个新的哈希表被创建并进行hset操作。如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行hsetnx命令。可用版本 >= 2.0.0

语法

hsetnx key field value

返回值

设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0 。

Redis hget命令

用于返回哈希表中指定字段的值。可用版本>= 2.0.0

语法

hget key field

返回值

返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

Redis hgetall命令

用于返回哈希表中,所有的字段和值。在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。可用版本 >= 2.0.0

语法

hgetall key

返回值

以列表形式返回哈希表的字段及字段值。若 key 不存在,返回空列表。

Redis hmget命令

用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。可用版本 >= 2.0.0

语法

hmget key field1...fieldn

返回值

一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。如果对应的 field 不存在则返回 nil。

Redis hlen命令

用于获取哈希表中字段的数量。可用版本 >= 2.0.0

语法

hlen key

返回值

哈希表中字段的数量。当 key 不存在时,返回 0 。

Redis hkeys命令

用于获取哈希表中的所有域(field)。可用版本 >= 2.0.0

语法

hkeys key

返回值

包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。

Redis hvals命令

返回哈希表所有域(field)的值。可用版本 >= 2.0.0

语法

hvals key

返回值

一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表。

Redis hexists命令

用于查看哈希表的指定字段是否存在。

语法

hexists key field

返回值

如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

Redis hdel命令

用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。可用版本 >= 2.0.0

语法

hdel key field.. fieldn

返回值

被成功删除字段的数量,不包括被忽略的字段。

Redis hincrby命令

用于为哈希表中的字段值加上指定增量值 increment。增量也可以为负数,相当于对指定字段进行减法操作。可用版本 >= 2.0.0

如果哈希表的 key 不存在,一个新的哈希表被创建并执行hincrby命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

对一个储存字符串值的字段执行hincrby命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。

语法

hincrby key field increment

返回值

执行 HINCRBY 命令之后,哈希表中字段的值。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> hset freya age 17
(integer) 1
127.0.0.1:6379> hincrby freya age 1
(integer) 18
127.0.0.1:6379> hincrby freya age -1
(integer) 17
127.0.0.1:6379> exists asher
(integer) 0
127.0.0.1:6379> hexists asher age
(integer) 0
127.0.0.1:6379> hincrby asher age 19
(integer) 19
127.0.0.1:6379> hgetall asher
1) "age"
2) "19"

Redis hincrbyfloat命令

用于为哈希表中的字段值加上指定浮点数增量值 increment。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。可用版本 >= 2.6.0

语法

hincrbyfloat key field increment

返回值

执行 Hincrbyfloat 命令之后,哈希表中字段的值。

Redis hscan命令

hscan key cursor [MATCH pattern] [COUNT count]

迭代哈希表中的键值对。与scan类似,看不太懂,回头再战。

Redis 列表(List)相关命令

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

Redis lpush命令

将一个或多个值插入到列表头部。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。可用版本>= 1.0.0 。在Redis 2.4版本以前的lpush命令,都只接受单个 value 值。 rpush 与之类似,只不过在列表尾部添加。

语法

lpush key value1.. valuen

返回值

执行lpush命令后,列表的长度。

Redis lpushx命令

将一个值插入到已存在的列表头部,列表不存在时操作无效。可用版本 >= 2.2.0 。rpushx与之类似,只不过在列表尾部添加。

语法

lpushx key value1.. valuen

返回值

lpush命令执行之后,列表的长度。

Redis lindex命令

用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。可用版本 >= 1.0.0

语法

lindex key index

返回值

列表中下标为指定索引值的元素。如果指定索引值不在列表的区间范围内,返回 nil。

Redis llen命令

用于返回列表的长度。如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。可用版本 >= 1.0.0

语法

llen key

返回值

列表的长度。

Redis linsert命令

用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。可用版本 >= 1.0.0

  1. 当列表不存在时,被视为空列表,不执行任何操作。
  2. 如果 key 不是列表类型,返回一个错误。

语法

linsert key BEFORE|AFTER pivot value

将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

返回值

如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

Redis lpop命令

用于移除并返回列表的第一个元素。可用版本 >= 1.0.0

语法

lpop key

返回值

列表的第一个元素。当列表 key 不存在时,返回 nil 。

Redis rpop命令

用于移除列表的最后一个元素,返回值为移除的元素。可用版本 >= 1.0.0

语法

rpop key

返回值

被移除的元素。当列表不存在时,返回 nil 。

Redis lrange命令

返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。可用版本 >= 1.0.0

语法

lrange key start end

返回值

一个列表,包含指定区间内的元素。

Redis lrem命令

根据参数 count 的值,移除列表中与参数 value 相等的元素。可用版本 >= 1.0.0

count 的值可以是以下几种:

  1. count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
  2. count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
  3. count = 0 : 移除表中所有与 value 相等的值。

语法

lrem key count value

返回值

被移除元素的数量。列表不存在时返回 0 。

Redis lset命令

通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行lset时,返回一个错误。可用版本 >= 1.0.0

语法

lset key index value

返回值

操作成功返回 ok ,否则返回错误信息。

Redis ltrim命令

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。可用版本 >= 1.0.0

下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

语法

ltrim key start end

返回值

命令执行成功时,返回 ok 。

Redis blpop命令

移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。可用版本 >= 2.0.0 。brpop与之类似,只不过在列表尾部移除。

当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。

超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。

语法

blpop list[list...] timeout

返回值
如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。可用版本 >= 1.0.0

Redis rpoplpush命令

用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

在一个原子时间内,执行以下两个动作:

  1. 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
  2. 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

语法

rpoplpush source_key dest_key

返回值

被弹出的元素。

Redis brpoplpush命令

brpoplpushrpoplpush的阻塞版本,当给定列表 source 不为空时,brpoplpush的表现和rpoplpush一样。可用版本 >= 2.2.0

当列表 source 为空时,brpoplpush命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行lpushrpush命令为止。

超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。

返回值:

假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。
反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。