Redis 支持Hash数据类型,本身Redis 的key 和value 就是Hash类型;而Redis 的键值也是可以支持Hash类型。
针对Hash类型,Redis 提供了以下命令:

设置指定key 的指定field 值。

如果field不存在,则创建field,成功则返回1,如果field存在,则重写,返回值为0。

可用版本:>= 2.0.0
时间复杂度:O(1)


10.6.25.66:9000> hset user:1 name zhangsan
(integer) 1
10.6.25.66:9000> hset user:1 name lisi
(integer) 0
                

批量设置指定key 的指定field 值。

可用版本:>= 2.0.0
时间复杂度:O(N) N为field数量。


10.6.25.66:9000> hmset user:1 name zhangsan age 20 sex 男
OK
                

批量设置指定key 的指定field 值。但前提是该field 必须不存在,如果存在,则不进行操作,返回0,如果不存在,则新建field,正常返回1。

可用版本:>= 2.0.0
时间复杂度:O(1)

name之前存在;hight不存在。


10.6.25.66:9000> hsetnx user:1 name lisi
(integer) 0
10.6.25.66:9000> hsetnx user:1 hight 170
(integer) 1
                

得到指定key 的指定field 值,如果key 或field 不存在 ,返回nil。

可用版本:>= 2.0.0
时间复杂度:O(1)


10.6.25.66:9000> hget user:1 name
"zhangsan"
10.6.25.66:9000> hget user:2 name
(nil)
                

返回指定key 的多个field的值 ,如果某个field 不存在 ,则该field 返回nil,其它正常返回;如果该key本身也不存在,则所有的field 都返回nil。

可用版本:>= 2.0.0
时间复杂度:O(N),N 为field 个数


10.6.25.66:9000> hset hello field1 value1
(integer) 1
10.6.25.66:9000> hmset hello field2 value2 field3 value3
OK
10.6.25.66:9000> hmget hello field1 field2 field3 field4
1) "value1"
2) "value2"
3) "value3"
4) (nil)
10.6.25.66:9000> hmget hello1 field1 field2
1) (nil)
2) (nil)
                

返回指定key 的所有field和对应value;

可用版本:>= 2.0.0
时间复杂度:O(N),N 为field总数


10.6.25.66:9000> hgetall hello
1) "field1"
2) "value1"
3) "field2"
4) "value2"
5) "field3"
6) "value3"
                

删除指定key 的指定field ;如果某个field 不存在 ,则直接忽略该field,删除完成后,返回成功删除的个数,如果要删除的key 本身不存在,则直接返回0;如果删除的key不是hash类型,则返回错误。

可用版本:>= 2.4.0 (小于2.4.0版本,只接收一个field )
时间复杂度:O(N),N 为被删除的field总数


10.6.25.66:9000> hdel hello field1 field2 field5
(integer) 2
10.6.25.66:9000> hdel hello1 field1 field2
(integer) 0
10.6.25.66:9000> set hello value
OK
10.6.25.66:9000> type hello
string
10.6.25.66:9000> hdel hello field1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
                

返回某个hash 类型的field 长度,如果该key不存在 ,则返回0 。

可用版本:>= 2.0.0
时间复杂度:O(1)


10.6.25.66:9000> hlen hello
(integer) 2
10.6.25.66:9000> del hello
(integer) 1
10.6.25.66:9000> hlen hello
(integer) 0
                

返回某个hash 类型的field 是否存在,存在返回1,不存在返回0。

可用版本:>= 2.0.0
时间复杂度:O(1)


10.6.25.66:9000> hexists hello field2
(integer) 0
10.6.25.66:9000> hexists hello field1
(integer) 1
                

返回某个hash 类型的所有field 。

可用版本:>= 2.0.0
时间复杂度:O(N),N为field 个数


10.6.25.66:9000> hmset hello field1 value1 field2 value2 field3 value3 field5 value5
OK
10.6.25.66:9000> hkeys hello
1) "field1"
2) "field2"
3) "field3"
4) "field5"
                

返回某个hash 类型的所有field 对应的value 。

可用版本:>= 2.0.0
时间复杂度:O(N),N为field 个数


10.6.25.66:9000> hmset hello field1 value1 field2 value2 field3 value3 field5 value5
OK
10.6.25.66:9000> hvals hello
1) "value1"
2) "value2"
3) "value3"
4) "value5"
                

与incrby 类似,增加Hash 类型中的某个field 的值,如果该key 或 该key 的field 不存在, 则会自动创建该key 和该field,field 的值默认为0,该命令支持的增加范围为64位的整数。

可用版本:>= 2.0.0
时间复杂度:O(1)


10.6.25.66:9000> hget hello field6
(nil)
10.6.25.66:9000> hincrby hello field6 100
(integer) 100
10.6.25.66:9000> hincrby hello field6 100
(integer) 200
10.6.25.66:9000> hincrby hello field1 100
(error) ERR hash value is not an integer
                

与incrbyfloat 类似,增加Hash 类型中的某个field 的值(float型),如果该key 或 该key 的field 不存在, 则会自动创建该key 和该field,field 的值默认为0,如果该field 已经存在,且该field 的值不能转化为float 型 ,则会返回错误。

可用版本:>= 2.6.0
时间复杂度:O(1)


10.6.25.66:9000> hincrbyfloat hello field1 20.4
(error) ERR hash value is not a valid float
10.6.25.66:9000> hincrbyfloat hello field6 20.6
"220.60000000000000001"
10.6.25.66:9000> hincrbyfloat hello field6 -20.6
"200"
                

计算Hash 类型中的某个field 的value 字符串长度。

可用版本:>= 3.2.0
时间复杂度:O(1)


10.6.25.66:9000> hstrlen hello field1
(integer) 6
10.6.25.66:9000> hstrlen hello field6
(integer) 3
10.6.25.66:9000> hstrlen hello field2
(integer) 6
                
Copyright © 2019-2020 2024-03-29 04:21:38