加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

NoSQL----Redis 2.4--Hash

发布时间:2020-12-13 13:39:10 所属栏目:百科 来源:网络整理
导读:Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 将一个对象存储在Hash类型中会占用更少的内存,并且更方便的存取整个对象。 1、hset方法: HSET key field value 将哈希表key中的字段(域)field的值设为value。 如果key不

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

将一个对象存储在Hash类型中会占用更少的内存,并且更方便的存取整个对象。

1、hset方法:

HSET key field value

将哈希表key中的字段(域)field的值设为value。

如果key不存在,一个新的哈希表被创建并进行HSET操作。

如果域field已经存在于哈希表中,旧值将被覆盖。

redis>HSETwebsitegoogle"www.g.cn"#对hash表websit的字段google设置为www.g.cn
(integer)1

redis>HSETwebsitegoogle"www.google.com"#覆盖一个旧域
(integer)0

2、hsetnx方法:

HSETNX key field value

将哈希表key中的域field的值设置为value,当且仅当域field不存在。

若域field已经存在,该操作无效。

如果key不存在,一个新哈希表被创建并执行HSETNX命令。

redis>HSETNXnosqlkey-value-storeredis
(integer)1

redis>HSETNXnosqlkey-value-storeredis#操作无效,域key-value-store已存在
(integer)0

3、hmset方法:

HMSET key field value [field value ...]

同时将多个field - value(域-值)对设置到哈希表key中。

此命令会覆盖哈希表中已存在的域。

如果key不存在,一个空哈希表被创建并执行HMSET操作。


#情况1:哈希表

redis>HMSETwebsitegooglewww.google.comyahoowww.yahoo.com
OK

redis>HGETwebsitegoogle
"www.google.com"

redis>HGETwebsiteyahoo
"www.yahoo.com"


#情况2:类型错误时

redis>SETG10#出错情况
OK

redis>HMSETGnamehuangzage20
(error)ERROperationagainstakeyholdingthewrongkindofvalue

4、hget方法:

HGET key field

返回哈希表key中给定域field的值。


redis>HSEThuangzbloghuangz.51cto.com
(integer)1

redis>HGEThuangzblog
"huangz.51cto.com"

5、hmget方法:

HMGET key field [field ...]

返回哈希表key中,一个或多个给定域的值。

如果给定的域不存在于哈希表,那么返回一个nil值。

因为不存在的key被当作一个空哈希表来处理,所以对一个不存在的key进行HMGET操作将返回一个只带有nil值的表。


redis>HMSETpetdog"tudou"cat"wandou"#一次保存多个值
OK

redis>HMGETpetdogcatfake_pet#返回值的顺序和传入参数的顺序一样。
1)"tudou"
2)"wandou"
3)(nil)#不存在的域返回nil值

6、hgetall方法:

HGETALL key

返回哈希表key中,所有的域和值。

在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

redis>HSEThash_namejack"JackSparrow"
(integer)1

redis>HSEThash_namegump"ForrestGump"
(integer)1

redis>HGETALLhash_name
1)"jack"#域
2)"JackSparrow"#值
3)"gump"#域
4)"ForrestGump"#值

7、hdel方法:

HDEL key field [field ...]

删除哈希表key中的一个或多个指定域,不存在的域将被忽略。

备注:在Redis2.4以下的版本里,HDEL每次只能删除单个域,如果你需要在一个原子时间内删除多个域,请将命令包含在MULTI/EXEC块内。

#测试数据

redis>HGETALLabbr
1)"a"
2)"apple"
3)"b"
4)"banana"
5)"c"
6)"cat"
7)"d"
8)"dog"

#删除单个域

redis>HDELabbra
(integer)1

#删除不存在的域

redis>HDELabbrnot-exists-field
(integer)0

#删除多个域

redis>HDELabbrbc
(integer)2

redis>HGETALLabbr
1)"d"
2)"dog"

8、hlen方法:

HLEN key

返回哈希表key中域的数量。

redis>HSEThash_namejack"JackSparrow"
(integer)1

redis>HSEThash_namegump"ForrestGump"
(integer)1

redis>HLENhash_name
(integer)2

9、hexists方法:


HEXISTS key field

查看哈希表key中,给定域field是否存在。

redis>HEXISTSphonemyphone
(integer)0

redis>HSETphonemyphonenokia-1110
(integer)1

redis>HEXISTSphonemyphone
(integer)1

9、hincrby方法:

INCRBY key field increment

为哈希表key中的域field的值加上增量increment。

增量也可以为负数,相当于对给定域进行减法操作。

如果key不存在,一个新的哈希表被创建并执行HINCRBY命令。

如果域field不存在,那么在执行命令前,域的值被初始化为0。

对一个储存字符串值的域field执行HINCRBY命令将造成一个错误。

本操作的值限制在64位(bit)有符号数字表示之内。

#情况1:increment为正数

redis>HEXISTScounterpage_view#对空域进行设置
(integer)0

redis>HINCRBYcounterpage_view200
(integer)200

redis>HGETcounterpage_view
"200"


#情况2:increment为负数

redis>HGETcounterpage_view
"200"

redis>HINCRBYcounterpage_view-50
(integer)150

redis>HGETcounterpage_view
"150"


#情况3:尝试对字符串值的域执行HINCRBY命令

redis>HSETmyhashstringhello,world#设定一个字符串值
(integer)1

redis>HGETmyhashstring
"hello,world"

redis>HINCRBYmyhashstring1#命令执行失败,错误。
(error)ERRhashvalueisnotaninteger

redis>HGETmyhashstring#原值不变
"hello,world"

10、hkeys方法:


HKEYS key

返回哈希表key中的所有域。

#情况1:哈希表非空

redis>HMSETwebsitegooglewww.google.comyahoowww.yahoo.com
OK

redis>HKEYSwebsite
1)"google"
2)"yahoo"


#情况2:空哈希表/key不存在

redis>EXISTSfake_key
(integer)0

redis>HKEYSfake_key
(emptylistorset)

11、hvals方法:


HVALS key

返回哈希表key中的所有值。


#情况1:非空哈希表

redis>HMSETwebsitegooglewww.google.comyahoowww.yahoo.com
OK

redis>HVALSwebsite
1)"www.google.com"
2)"www.yahoo.com"


#情况2:空哈希表/不存在的key

redis>EXISTSnot_exists
(integer)0

redis>HVALSnot_exists
(emptylistorset)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读