Redis-Hash

Redis-Hash



一、Hash哈希是什么?

⼏乎所有的主流编程语⾔都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在Redis中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如key=“key”,value={{field1,value1},…,{fieldN,valueN}},Redis键值对和哈希类型⼆者的关系可以⽤下图来表示。
字符串和哈希类型对⽐
哈希类型中的映射关系通常称为field-value,⽤于区分Redis整体的键值对(key-value),注意这⾥的value是指field对应的值,不是键(key)对应的值,请注意value在不同上下⽂的作⽤。

二、Hash基本命令操作

1.hset操作

设置hash中指定的字段(field)的值(value)。
命令有效版本:2.0.0之后
时间复杂度:插⼊⼀组field为O(1),插⼊N组field为O(N)
返回值:添加的字段的个数。
语法:hset key field value [field value …]

redis> hset myhash field1 "Hello"
(integer) 1
redis> hget myhash field1
"Hello"

2.hget操作

获取hash中指定字段的值。
命令有效版本:2.0.0之后
时间复杂度:O(1)
返回值:字段对应的值或者nil。
语法:hget key field
代码如下(示例):

redis> hset myhash field1 "foo"
(integer) 1
redis> hget myhash field1
"foo"
redis> hget myhash field2
(nil)

3.hexists操作

判断hash中是否有指定的字段。
命令有效版本:2.0.0之后
时间复杂度:O(1)
返回值:1表⽰存在,0表⽰不存在。
语法:hexists key field
代码如下(示例):

redis> hset myhash field1 "foo"
(integer) 1
redis> hexists myhash field1
(integer) 1
redis> hexists myhash field2
(integer) 0

4.hdel操作

删除hash中指定的字段。
命令有效版本:2.0.0之后
时间复杂度:删除⼀个元素为O(1).删除N个元素为O(N).
返回值:本次操作删除的字段个数。
语法: hdel key field [field …]
代码如下(示例):

redis> hset myhash field1 "foo"
(integer) 1
redis> hdel myhash field1
(integer) 1
redis> hdel myhash field2
(integer) 0

5.hkeys操作

获取hash中的所有字段。
命令有效版本:2.0.0之后
时间复杂度:O(N),N为field的个数.
返回值:字段列表。
语法:hkeys key
代码如下(示例):

redis> hset myhash field1 "Hello"
(integer) 1
redis> hset myhash field2 "World"
(integer) 1
redis> hkeys myhash
1) "field1"
2) "field2"

6.hvals操作

获取hash中的所有的值。
命令有效版本:2.0.0之后
时间复杂度:O(N),N为field的个数.
返回值:所有的值。
语法: hvals key
代码如下(示例):

redis> hset myhash field1 "Hello"
(integer) 1
redis> hset myhash field2 "World"
(integer) 1
redis> hvals myhash
1) "Hello"
2) "World"

7.hgetall操作

获取hash中的所有字段以及对应的值。
命令有效版本:2.0.0之后
时间复杂度:O(N),N为field的个数.
返回值:字段和对应的值。
语法:hgetall key
代码如下(示例):

redis> hset myhash field1 "Hello"
(integer) 1
redis> hset myhash field2 "World"
(integer) 1
redis> hgetall myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"

8.hmget操作

⼀次获取hash中多个字段的值。
命令有效版本:2.0.0之后
时间复杂度:只查询⼀个元素为O(1),查询多个元素为O(N),N为查询元素个数.
返回值:字段对应的值或者nil。
语法:hmget key field [field …]
代码如下(示例):

redis> hset myhash field1 "Hello"
(integer) 1
redis> hset myhash field2 "World"
(integer) 1
redis> hmget myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)

在使⽤hgetall时,如果哈希元素个数⽐较多,会存在阻塞Redis的可能。如果开发⼈员只需要获取部分field,可以使⽤hmget,如果⼀定要获取全部field,可以尝试使⽤hscan命令,该命令采⽤渐进式遍历哈希类型.

9.hlen操作

获取hash中的所有字段的个数。
命令有效版本:2.0.0之后
时间复杂度:O(1)
返回值:字段个数。
语法:hlen key
代码如下(示例):

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2

10.hsetnx操作

在字段不存在的情况下,设置hash中的字段和值。
命令有效版本:2.0.0之后
时间复杂度:O(1)
返回值:1表⽰设置成功,0表⽰失败。
语法: hsetnx key field value
代码如下(示例):

redis> hsetnx myhash field "Hello"
(integer) 1
redis> hsetnx myhash field "World"
(integer) 0
redis> hget myhash field
"Hello"

11.hincrby操作

将hash中字段对应的数值添加指定的值。
命令有效版本:2.0.0之后
时间复杂度:O(1)
返回值:该字段变化之后的值。
语法: hincrby key field increment
代码如下(示例):

redis> hset myhash field 5
(integer) 1
redis> hincrby myhash field 1
(integer) 6
redis> hincrby myhash field -1
(integer) 5
redis> hincrby myhash field -10
(integer) -5

三、命令小结操作

命令时间复杂度
hset key field valueO(1)
hget key fieldO(1)
hdel key field [field …]O(k),k是field个数
hlen keyO(1)
hgetall keyO(k),k是field个数
hmget field[field…]O(k),k是field个数
hmset field value[field value…]O(k),k是field个数
hkeys/hvals keyO(k),k是field个数
hsetnx key field valueO(1)
hincrby key field nO(1)

总结

本文介绍了redis中Hash的有关操作,并且给出了相应的操作代码示例,分析了相关操作的时间复杂度。希望以上内容能帮助大家了解到Hash的相关知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值