天天看點

Redis的Hash類型

 Redis hash 指令

下表列出了 redis hash 基本的相關指令:

序号 指令及描述
1

HDEL key field1 [field2] 

删除一個或多個哈希表字段

2

HEXISTS key field 

檢視哈希表 key 中,指定的字段是否存在。

3

HGET key field 

擷取存儲在哈希表中指定字段的值。

4

HGETALL key 

擷取在哈希表中指定 key 的所有字段和值

5

HINCRBY key field increment 

為哈希表 key 中的指定字段的整數值加上增量 increment 。

6

HINCRBYFLOAT key field increment 

為哈希表 key 中的指定字段的浮點數值加上增量 increment 。

7

HKEYS key 

擷取所有哈希表中的字段

8

HLEN key 

擷取哈希表中字段的數量

9

HMGET key field1 [field2] 

擷取所有給定字段的值

10

HMSET key field1 value1 [field2 value2 ] 

同時将多個 field-value (域-值)對設定到哈希表 key 中。

11

HSET key field value 

将哈希表 key 中的字段 field 的值設為 value 。

12

HSETNX key field value 

隻有在字段 field 不存在時,設定哈希表字段的值。

13

HVALS key 

擷取哈希表中所有值

14

HSCAN key cursor [MATCH pattern] [COUNT count] 

疊代哈希表中的鍵值對。

 示例如下:

127.0.0.1:6379> HSET user name zhangsan
(integer) 1
127.0.0.1:6379> HGETALL user
1) "name"
2) "zhangsan"
127.0.0.1:6379> hest user age 38
(error) ERR unknown command `hest`, with args beginning with: `user`, `age`, `38`,
127.0.0.1:6379> hset user age 38
(integer) 1
127.0.0.1:6379> HGETALL user
1) "name"
2) "zhangsan"
3) "age"
4) "38"
127.0.0.1:6379> HGET user name
"zhangsan"
127.0.0.1:6379> hmget name age
1) (nil)
127.0.0.1:6379> hmget user name age
1) "zhangsan"
2) "38"
127.0.0.1:6379> HLEN user
(integer) 2
127.0.0.1:6379> HEXISTS user name
(integer) 1
127.0.0.1:6379> HKEYS user
1) "name"
2) "age"
127.0.0.1:6379> HVALS user
1) "zhangsan"
2) "38"
127.0.0.1:6379> HINCRBY user age 2
(integer) 40
127.0.0.1:6379> HVALS user
1) "zhangsan"
2) "40"
127.0.0.1:6379>      

 hash 類型應用場景 :

Redis的Hash類型

 簡單示範:

127.0.0.1:6379> hset u1 g01 100 g02 200
(integer) 2
127.0.0.1:6379> HGETALL u1
1) "g01"
2) "100"
3) "g02"
4) "200"
127.0.0.1:6379> HMSET u2 g01 100 g02 100
OK
127.0.0.1:6379> HGETALL u2
1) "g01"
2) "100"
3) "g02"
4) "100"
127.0.0.1:6379> hset u1 g03 5
(integer) 1
127.0.0.1:6379> HGETALL u1
1) "g01"
2) "100"
3) "g02"
4) "200"
5) "g03"
6) "5"
127.0.0.1:6379> hdel u1 g01
(integer) 1
127.0.0.1:6379> HGETALL u1
1) "g02"
2) "200"
3) "g03"
4) "5"
127.0.0.1:6379> HINCRBY g02 100
(error) ERR wrong number of arguments for 'hincrby' command
127.0.0.1:6379> HINCRBY u1 g02 100
(integer) 300
127.0.0.1:6379> HGETALL u1
1) "g02"
2) "300"
3) "g03"
4) "5"
127.0.0.1:6379> HMSET u3 g01:nums 100 g01:info {.....}
OK
127.0.0.1:6379> HGETALL u3
1) "g01:nums"
2) "100"
3) "g01:info"
4) "{.....}"
127.0.0.1:6379> HMSET u3 g02:nums 200 g02:info {.....}
OK
127.0.0.1:6379> HGETALL u3
1) "g01:nums"
2) "100"
3) "g01:info"
4) "{.....}"
5) "g02:nums"
6) "200"
7) "g02:info"
8) "{.....}"
127.0.0.1:6379>      

解決方案

 以客戶id作為key,每位客戶建立一個hash存儲結構存儲對應的購物車資訊

 将商品編号作為field,購買數量作為value進行存儲

 添加商品:追加全新的field與value

 浏覽:周遊hash

 更改數量:自增/自減,設定value值

 删除商品:删除field

 清空:删除key

當購物車儲存商家資訊的時候,可以把商家資訊儲存成一個Hash,把标記存到購物車的Hash種就可以了

業務場景

雙11活動日,銷售手機儲值卡的商家對移動、聯通、電信的30元、 50元、 100元商品推出搶購活動,每種商

品搶購上限1000張

Redis的Hash類型
127.0.0.1:6379> hmset p01 c30 1000 c50  1000
OK
127.0.0.1:6379> HINCRBY p01 c30 -20
(integer) 980
127.0.0.1:6379> HGETALL p01
1) "c30"
2) "980"
3) "c50"
4) "1000"
127.0.0.1:6379>      

繼續閱讀