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 | 127.0.0.1:6379> hset freya age 17 |
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
- 当列表不存在时,被视为空列表,不执行任何操作。
- 如果 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 的值可以是以下几种:
- count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
- count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
- 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
命令
用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
在一个原子时间内,执行以下两个动作:
- 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
- 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。
语法
rpoplpush source_key dest_key
返回值
被弹出的元素。
Redis brpoplpush
命令
brpoplpush
是rpoplpush
的阻塞版本,当给定列表 source 不为空时,brpoplpush
的表现和rpoplpush
一样。可用版本 >= 2.2.0
当列表 source 为空时,brpoplpush
命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行lpush
或rpush
命令为止。
超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
返回值:
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。
反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。