Redis 的数据类型 - Hash 对象类型

Posted Shuo_128

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 的数据类型 - Hash 对象类型相关的知识,希望对你有一定的参考价值。

#Hash更容易存储对象,比如在设置用户姓名,年龄,邮箱等属性时,用string需要分别来进行设置存储,通过Hash就可以把属性放到对象中,然后再存储对象,因此相对于string类型,Hash类型存储对象可以占用更少的字节#

 

  在配置文件中可以通过配置 

  hash-max-ziplist-entries 512  #存储值得最大字节512字节#

  hash-max-ziplist-value 64  #字段数目,默认64#

 

HSET:将 Hash 表 key 中域 field 设置成指定的 value
HGET:返回 Hash 表 key 中给定 field 的值

  语法:HSET key field value

    HGET key field

    HSET userInfo1 username ‘tom‘ 

    HSET userInfo1 password ‘123456‘ 

    HSET userInfo1 email ‘[email protected]

    HGET userInfo1 username

    HSET userInfo1 username ‘jerry‘   #这时 userInfo1 的 username 已经重赋值为 ‘jerry‘ #

    HGET userInfo2 username  #如果 Hash 表 key 中 field 不存在,则返回 nil 如果 key 中 field 不存在,返回的是 nil #

127.0.0.1:6379> HSET userInfo1 username tom
(integer) 1

127.0.0.1:6379> HSET userInfo1 password 123456
(integer) 1

127.0.0.1:6379> HSET userInfo1 email [email protected]
(integer) 1

127.0.0.1:6379> HGET userInfo1 username
"tom"

127.0.0.1:6379> HSET userInfo1 username jerry
(integer) 0

127.0.0.1:6379> HGET userInfo1 username
"jerry"

 

HSETNX:将 Hash 表中的 field 设置成指定的值,只要 field 不存在的时候才可以成功;如果 field 存在,操作无效

  语法:HSETNX key field value

    HSETNX testHash1 test ‘tom‘ #返回 0 #

 

HMSET:同时将多个 field-value 设置到 Hash 表 key 中
HMGET:一次获得 Hash 表 key 中多个 field 的值

  语法:HMSET key field value field value ...
    HMGET key field field

    HMSET userInfo2 username ‘tom‘ password ‘123456‘ email ‘[email protected]‘ 

    HGET userInfo2 username

    HMSET userInfo2 username ‘jerry‘ addr ‘nanjing‘  #存在覆盖,不存在添加,返回 ok #

    HMGET userInfo2 username password email addr phone  #这里phone这个field并不存在,返回nil#

127.0.0.1:6379> HMSET userInfo2 username tom password 123456 email [email protected]
OK

127.0.0.1:6379> HGET userInfo2 username
"tom"

127.0.0.1:6379> HMSET userInfo2 username jerry addr nanjing
OK

127.0.0.1:6379> HMGET userInfo2 username password email addr phone
1) "jerry"
2) "123456"
3) "tom@qq.com"
4) "nanjing"
5) (nil)

 

HGETALL:返回 Hash 表 key 中所有的 field 和 value

  语法:HGETALL key

    HGETALL userInfo2   #如果key不存在,则返回(empty list or set)#

127.0.0.1:6379> HGETALL userInfo2
1) "username"
2) "jerry"
3) "password"
4) "123456"
5) "email"
6) "tom@qq.com"
7) "addr"
8) "nanjing"

 

HKEYS:返回 Hash 中 key 的所有的 field

  语法:HKEYS key

    HKEYS userInfo2

127.0.0.1:6379> HKEYS userInfo2
1) "username"
2) "password"
3) "email"
4) "addr"

 

HVALS:返回 Hash 中 key 中 field 所有的对应的值

  语法:HVALS key

    HVALS userInfo2

127.0.0.1:6379> HVALS userInfo2
1) "jerry"
2) "123456"
3) "tom@qq.com"
4) "nanjing"

 

HEXISTS:检测 Hash 中 key 的 field 是否存在

  语法:HEXISTS key field

    HEXISTS userInfo2 username   #存在,返回 1 #

    HEXISTS userInfo2 sex   #不存在,返回 0 #

127.0.0.1:6379> HEXISTS userInfo2 username
(integer) 1

127.0.0.1:6379> HEXISTS userInfo2 sex
(integer) 0

 

HLEN:返回 Hash 表 key 中 field 的数量

  语法:HLEN key

    HLEN userInfo2   #如果key不存在,返回 0 #

127.0.0.1:6379> HLEN userInfo2
(integer) 4

 

HINCRBY:给 Hash 中 key 的 field 做增量操作

  语法:HINCRBY key field increment

    HSET userInfo3 age 12

    HINCRBY userInfo3 age 10   #返回22#

    HSET userInfo3 username ‘tom‘

    HINCRBY userInfo3 username 10   #对字符串进行设置就会报错#

127.0.0.1:6379> HSET userInfo3 age 12
(integer) 1

127.0.0.1:6379> HINCRBY userInfo3 age 10
(integer) 22

127.0.0.1:6379> HSET userInfo3 username tom
(integer) 1

127.0.0.1:6379> HINCRBY userInfo3 username 10
(error) ERR hash value is not an integer

 

HINCRBYFLOAT:给 Hash 中 key 的 field 做增量 float 操作

  语法:HINCRBYFLOAT key field increment

  HSET userInfo3 salary ‘12345‘

  HINCRBYFLOAT userInfo3 salary 0.888  #如果设置的数字为 int 型,而添加的数为 float 型,则返回值会自动补全 12 位小数#

127.0.0.1:6379> HSET userInfo3 salary 12345
(integer) 1

127.0.0.1:6379> HGET userInfo3 salary
"12345"

127.0.0.1:6379> HINCRBYFLOAT userInfo3 salary 0.888
"12345.888000000001"

 

HDEL:删除 Hash 中 key 的指定域,可以删除一个也可以删除多个

  语法:HDEL key field field

    HGETALL userInfo1

    HDEL userInfo1 username password email  #返回删除的条数,如果没有删除返回 0 #

127.0.0.1:6379> HDEL userInfo1 username password email
(integer) 3

 




以上是关于Redis 的数据类型 - Hash 对象类型的主要内容,如果未能解决你的问题,请参考以下文章

系统学习redis之四——redis数据类型之hash类型及操作

Redis hash数据类型操作命令

使用Redis的Hash存储Java对象

Redis数据类型之散列类型hash

Redis学习-hash数据类型

Redis笔记-Hash数据类型