redis 數據類型之hash 哈希
原文:https://ooyhao.github.io/categories/DB/Redis/
哈希簡介
hash 是一個string 類型的field和value的映射表,hash特別適合用於存儲對象。redis中每個hash可以存儲2^32 -1 個鍵值對(40多億)。
Hash 命令集合
hset
HSET key field value
hset 命令用於爲哈希表中字段賦值。如果哈希表不存在,一個新的哈希表被創建並進行hset操作。
如果字段已經存在於哈希表中,舊值將被覆蓋。
127.0.0.1:6379> hset stu1 name zhangsan
(integer) 1
hmset
HMSET key field1 value1 [field2 value2]
hmset 命令用於同時將多個field-value(字段-值)對設置到哈希表中。此命令會覆蓋哈希表中已經存在的字段。如果哈希表不存在,會創建一個空的哈希表,並執行hmset命令操作。
127.0.0.1:6379> hmset stu1 name ooyhao age 23 sex male
OK
hsetnx
HSETNX key field value
hsetnx 命令用於爲哈希表中不存在的字段賦值。如果哈希表不存在,一個新的哈希表被創建並進行hset操作。
- 如果字段已經存在於哈希表中,則操作無效。
- 如果key不存在,一個新的哈希表被創建並執行hsetnx命令。
127.0.0.1:6379> hgetall stu1
1) "name"
2) "ooyhao"
3) "age"
4) "18"
5) "sex"
6) "female"
127.0.0.1:6379> hsetnx stu1 name ouYang
(integer) 0
127.0.0.1:6379> hsetnx stu1 salary 7500
(integer) 1
127.0.0.1:6379> hgetall stu1
1) "name"
2) "ooyhao"
3) "age"
4) "18"
5) "sex"
6) "female"
7) "salary"
8) "7500"
hget
HGET key field
hget 命令用於返回哈希表中執行字段的值。
127.0.0.1:6379> hmset stu1 name ooyhao age 23 sex male
OK
127.0.0.1:6379> hget stu1 name
"ooyhao"
127.0.0.1:6379> hget stu1 age
"23"
127.0.0.1:6379> hget stu1 sex
"male"
hmget
HMGET key field1 [field2]
hmget 命令用於返回哈希表中,一個或多個給定字段的值。如果指定的字段不存在與哈希表中,則返回一個nil值。
127.0.0.1:6379> hmget stu1 name age salary
1) "ooyhao"
2) "23"
3) (nil)
hgetall
HGETALL key
hgetall 命令用於返回哈希表中,所有的字段和值。在返回值中,緊跟着每個字段名(field name)之後的是字段的值(value).左右返回值的長度是哈希表大小的兩倍。
127.0.0.1:6379> hgetall stu1
1) "name"
2) "ooyhao"
3) "age"
4) "23"
5) "sex"
6) "male"
hdel
HDEL key field1 [field2]
hdel 命令用於刪除指定哈希表中的一個或多個字段。不存在的字段將被忽略。
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
3) "sex"
4) "salary"
127.0.0.1:6379> hdel stu1 sex salary
(integer) 2
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
hincrby
HINCRBY key field increment
hincrby 命令用於爲哈希表中的字段值加上指定的增量值。增量也可以是負數,相當於對指定字段進行減法操作。
-
如果哈希表的key不存在,一個新的哈希表被創建並執行hincrby操作。
-
如果指定的字段不存在,那麼在執行命令前,字段的值被初始化爲0.
對一個存儲字符串值的字段執行hincrby 命令將造成一個錯誤,本操作的值被限制在64位(bit)有符號數字表示之內。
127.0.0.1:6379> hincrby stu1 age 1
(integer) 19
127.0.0.1:6379> hincrby stu1 age 1
(integer) 20
127.0.0.1:6379> hincrby stu1 age -1
(integer) 19
127.0.0.1:6379> hincrby stu1 age -2
(integer) 17
127.0.0.1:6379> hincrby stu1 name 1
(error) ERR hash value is not an integer
hincrbyfloat
HINCRBYFLOAT key field increment
hincrbyfloat 命令用於爲哈希表中的字段值加上浮點數增量值。如果指定的字段不存在,那麼在執行命令前,該字段會被初始化爲0.
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hincrbyfloat stu1 salary 10.5
"10.5"
127.0.0.1:6379> hincrbyfloat stu1 salary 1
"11.5"
hexists
HEXISTS key field
hexists 命令用於查看哈希表中的指定字段是否存在。
127.0.0.1:6379> hdel stu1 salary
(integer) 1
127.0.0.1:6379> hexists stu1 name
(integer) 1
127.0.0.1:6379> hexists stu1 salary
(integer) 0
hlen
HLEN key
hlen 命令用於獲取哈希表中字段的數量。
127.0.0.1:6379> hlen stu1
(integer) 3
hkeys
HKEYS key
hkeys 命令用於獲取哈希表中的所有域(field).
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
3) "sex"
hvals
HVALS key
hvals 命令返回哈希表所有的字段的值。
127.0.0.1:6379> hvals stu1
1) "ooyhao"
2) "23"
3) "male"
本文參考自菜鳥教程:https://www.runoob.com/redis/redis-hashes.html
更多請移步官網