1. 程式人生 > >Redis 的數據類型 - Hash 對象類型

Redis 的數據類型 - Hash 對象類型

logs 存儲對象 返回值 color font incr tom error 最大

#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 對象類型