API的理解和使用——哈希类型的命令

哈希常用的命令复习
命令功能
hset key field value设置哈希值
hsetnx设置哈希值,field或键必须不存在
hget获取某个file对应的值
hdel删除一个或多个field-value
hlen计算field的个数
hmset批量设置field-value
hmget批量获取field-value
hexists判断某个field是否存在
hkeys获取所有的field
hvals获取所有的value
hgetall获取所有的field-value
hincrby自增整数
hincrbyfloat自增浮点数
hstrlen 计算value字符串的长度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。

在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},

Redis键值对和哈希类型二者的关系可以用下图来表示:

注意:哈希类型中的映射关系叫做field-value,注意这里的value是指field对应的值,不是键对应的值,一定要注意value在不同上下文的作用。

下面介绍一些哈希常用的命令。

1)设置值

命令:hset key field value

127.0.0.1:6379> hset user:1 name kebi
(integer) 1
127.0.0.1:6379> hset user:1 age 26
(integer) 1

如果设置成功会返回1,反之会返回0。

此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。

127.0.0.1:6379> hexists user:1 name
(integer) 1    #user:1 name存在
127.0.0.1:6379> hsetnx user:1 name xiaoniao
(integer) 0    #没有设置成功
127.0.0.1:6379> hget user:1 name
"kebi"
127.0.0.1:6379> hsetnx user:4 name xiaoniao
(integer) 1
127.0.0.1:6379> hget user:4 name
"xiaoniao"  #field不存在才行

 

2)获取值

命令:hget key field

127.0.0.1:6379> hget user:1 name
"kebi"
127.0.0.1:6379> hget user:1 dorm
(nil)

如果键的field不存在或者或键本身就不存在,会返回nil。

 

3)删除field

命令:hdel key field [field ...]

hdel会删除一个或多个field,返回结果为成功删除field的个数:

127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hdel user:1 name
(integer) 1
127.0.0.1:6379> hkeys user:1
1) "age"
2) "sex"

注意如果要删除键,还是使用del:

127.0.0.1:6379> del user:1
(integer) 1
127.0.0.1:6379> exists user:1
(integer) 0

并没有说能单独删除哈希的value,因为没有意义。

 

4)计算field的个数

命令:hlen key

127.0.0.1:6379> hset user:1 name kebi
(integer) 1
127.0.0.1:6379> hset user:1 age 26
(integer) 1
127.0.0.1:6379> hset user:1 sex boy
(integer) 1
127.0.0.1:6379> hlen user:1
(integer) 3

 

5)批量设置或获取field-value

命令:

hmget key field [field ...]
hmset key field value [field value ...]

hmset和hmget分别是批量设置和获取field-value,hmset需要的参数是key和多对field-value,hmget需要的参数是key和多个field:

127.0.0.1:6379> hmget user:1 name age sex
1) "kebi"
2) "26"
3) "boy"
127.0.0.1:6379> hmset user:2 name maoxian age 25 sex boy
OK
127.0.0.1:6379> hmget user:2 name age sex
1) "maoxian"
2) "25"
3) "boy"

 

6)判断field是否存在

命令:hexists key field

127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 dorm
(integer) 0

如果field存在,返回结果为1,如果不存在返回0.

 

7)获取所有的field

命令:hkeys key

hkeys命令应该叫hfields更为恰当,它返回指定哈希键所有的field:

127.0.0.1:6379> keys *  #返回所有的键
1) "user:2"
2) "user:1"
127.0.0.1:6379> hkeys user:1 #返回键user:1所有的field
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hkeys user:2
1) "name"
2) "age"
3) "sex"

 

8)获取所有value

命令:hvals key

127.0.0.1:6379> hvals user:1
1) "kebi"
2) "26"
3) "boy"
127.0.0.1:6379> hvals user:2
1) "maoxian"
2) "25"
3) "boy"

 

9)获取所有的field-value

命令:hgetall key

127.0.0.1:6379> hgetall user:1
1) "name"
2) "kebi"
3) "age"
4) "26"
5) "sex"
6) "boy"

注意:在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。

  如果只需要获取部分field,可以使用hmget,如果一定要回去全部的field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。

 

10)hincrby hincrbyfloat

命令:

hincrby key field
hincrbyfloat key field

hincrby和hincrbyfloat命令一样,但是它们的作用域是field。

 

11)计算value的字符长度(需要Redis3.2版本以上)

命令:hstrlen key field

 

下面提供一张哈希类型命令的时间复杂度,可以根据自身的需求选择合适的命令。

哈希类型命令的时间复杂度
命令                            时间复杂度
hset key field valueO(1)
hget key fieldO(1)
hdel key field [field ...]O(k),k是field个数
hlen keyO(1)
hgetall keyO(n),n是field总数
hmget field [field ...]O(k),k是field个数
hmset field value [field value...]O(k),k是field个数
hexists key fieldO(1)
hkeys keyO(n),n是field总数
hvals keyO(n),n是field总数
hsetnx key field valueO(1)
hincrby key field incrementO(1)
hincrbyfloat key field increment O(1)
hstrlen key fieldO(1)

 

转载于:https://www.cnblogs.com/yangmingxianshen/p/8046984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值