-
Redis hash
是一個 string
類型的 field
和 value
的映射表棺聊,hash
特別適合用于存儲對象。
-
Set
就是一種簡化的 Hash
囤攀,只變動 key
背稼,而 value
使用默認值填充。
- 可以將一個
Hash
表作為一個對象進行存儲植兰,表中存放對象的信息份帐。
- 特點:
value
是一個 map
結構,存在 key value key
楣导,無序的
- 內存模型
命令 |
說明 |
hset |
設置一個key/value對 |
hget |
獲得一個key對應的value |
hgetall |
獲得所有的key/value對 |
hdel |
刪除某一個key/value對 |
hexists |
判斷一個key是否存在 |
hlen |
獲取哈希表中字段的數量 |
hkeys |
獲得所有的key |
hvals |
獲得所有的value |
hmset |
設置多個key/value |
hmget |
獲得多個key的value |
hsetnx |
設置一個不存在的 key 的值废境,如 key 存在則不能設置 |
hincrby |
為value進行加法運算 |
hincrbyfloat |
為value加入浮點值 |
127.0.0.1:6379> hset myhash field1 h1 # set 一個具體 key-value
(integer) 1
127.0.0.1:6379> hget myhash field1 # 獲取一個字段值
"h1"
127.0.0.1:6379> hmset myhash field1 hello field2 world # set 多個 key-value
OK
127.0.0.1:6379> hmget myhash field1 field2 # 獲取多個字段值
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash # 獲取全部的數據
1) "field1" # key
2) "hello" # value
3) "field2"
4) "world"
127.0.0.1:6379> hdel myhash field1 # 刪除 hash 指定 key 字段筒繁,對應的 value 值消失
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"
3) "field1"
4) "hello"
127.0.0.1:6379> hlen myhash # 獲取 hash 表的字段數量
(integer) 2
- 查看哈希表
key
中噩凹,指定的字段是否存在:hexists
127.0.0.1:6379> hexists myhash field1
(integer) 1 # 1 表示存在
127.0.0.1:6379> hexists myhash field3
(integer) 0 # 0 表示不存在
127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field1"
127.0.0.1:6379> hvals myhash
1) "world"
2) "hello"
127.0.0.1:6379> hset myhash field3 0 # 添加字段,初始值為 0
(integer) 0
127.0.0.1:6379> hincrby myhash field3 1 # 指定增量 1
(integer) 1
127.0.0.1:6379> hvals myhash
1) "world"
2) "hello"
3) "1"
127.0.0.1:6379> hincrby myhash field3 -1 # 指定增量 -1毡咏,相當于自減 decr
(integer) 0
- 設置一個不存在的
key
的值(如 key
存在則不能設置):hsetnx
127.0.0.1:6379> hsetnx myhash field4 hello # key 不存在驮宴,可以設置
(integer) 1
127.0.0.1:6379> hsetnx myhash field4 hello # key 已存在,不可以設置
(integer) 0
-
hash
最多的應用:存儲變更的數據 user:id
呕缭、name
堵泽、age
,尤其是用戶信息之類恢总,經常變動的信息迎罗!
127.0.0.1:6379> hset user:1 name li # user:1 為 hash 的一個對象
(integer) 1
127.0.0.1:6379> hset user:1 name li age 20 # 在user:1 對象下,添加 name 和 age 字段
(integer) 1
127.0.0.1:6379> hvals user:1
1) "li"
2) "20"
127.0.0.1:6379> hgetall user:1
1) "name"
2) "li"
3) "age"
4) "20"
127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
hash
更適合于對象的存儲片仿,String
更加適合字符串存儲