Redis 資料型別 Hash

2021-10-04 22:22:24 字數 4097 閱讀 7825

對一系列儲存的資料進行編組,方便管理,典型應用儲存物件資訊

乙個儲存空間儲存多個鍵值對資料

底層使用雜湊表結構實現資料儲存

注意:hash型別下的value只能儲存字串,不允許儲存其他資料型別,不存在巢狀現象

每個 hash 可以儲存 2 32 - 1 個鍵值對

hash型別十分貼近物件的資料儲存形式,並且可以靈活新增刪除物件屬性。但hash設計初衷不是為了儲存大量物件而設計的,切記不可濫用,更不可以將hash作為物件列表使用

hgetall 操作可以獲取全部屬性,如果內部field過多,遍歷整體資料效率就很會低,有可能成為資料訪問瓶頸

使用:

name對應的hash中設定乙個鍵值對(不存在,則建立,否則,修改)

hset(self, name, key, value)

案例:

red.hset('key1', 'name1', 'haha')

red.hset('key1', 'age1', 20)

print(red.hget('key1', 'name1')) # b'haha'

hkeys: 獲取key對應的字典中所有的鍵

print(red.hkeys('key1')) # [b'name1', b'age1']

hvals: 獲取key對應的字典中所有的值

print(red.hvals('key1')) # [b'haha', b'20']

在name對應的hash中根據key獲取value

hget(self, name, key)

案例:

red.hset("name","key","value")

print(red.hget("name","key")) # 輸出:'value'

獲取name對應字典的所有鍵值對

hgetall(self, name)

案例:

red.hset('key1', 'name1', 'haha')

red.hset('key1', 'age1', 20)

print(red.hgetall('key1')) #

案例:

dic=

red.hmset("name",dic)

print(red.hget("name","key2")) # b'22'

print(red.hkeys('name')) # [b'key1', b'key2']

print(red.hvals('name')) # [b'aa', b'22']

在name對應的hash中批量獲取鍵所對應的值

hmget(self, name, keys, *args)

案例:

dic=

red.hmset("name",dic)

print(red.hmget("name","key1","key2")) # 輸出:['aa', 'bb']

獲取hash鍵值對的個數

hlen(self, name)

案例:

dic=

red.hmset("name",dic)

print(red.hlen('name')) # 2

檢查name對應的hash是否存在當前傳入的key

hexists(self, name, key)

案例:

dic=

red.hmset("name",dic)

print(red.hexists("name","key1")) # 輸出:ture

刪除指定name對應的key所在的鍵值對,刪除成功返回1,失敗返回0

hdel(self, name, *keys)

案例:

dic=

red.hmset("name",dic)

print(red.hdel("name","key1")) # 輸出:1

與hash中key對應的值相加,不存在則建立key=amount(amount為整數)

hincrby(self, name, key, amount=1)

案例:

dic=

red.hmset("name",dic)

print(red.hincrby("name","key",amount=10)) # 返回:10

增量式迭代獲取,對於資料大的資料非常有用,

hscan可以實現分片的獲取資料,並非一次性將資料全部獲取完,從而放置記憶體被撐爆

hscan(name, cursor=0, match=none, count=none)

引數:

場景:電商**購物車設計與實現

業務分析:

1.僅分析購物車的redis儲存模型

新增、瀏覽、更改數量、刪除、清空

2.購物車於資料庫間持久化同步(不討論)

3.購物車於訂單間關係(不討論)

提交購物車:讀取資料生成訂單

商家臨時**調整:隸屬於訂單級別

4.未登入使用者購物車資訊儲存(不討論)

cookie儲存

解決方案:

當前僅僅是將資料儲存到了redis中,並沒有起到加速的作用,商品資訊還需要二次查詢資料庫

每條購物車中的商品記錄儲存成兩條field

field1專用於儲存購買數量

命名格式:商品id:nums

儲存資料:數值

field2專用於儲存購物車中顯示的資訊,包含文字描述,位址,所屬商家資訊等

命名格式:商品id:info

儲存資料:json

127.0.0.1:6379> hmset user:id:001 g:id:01:nums 10 g:id:01:info 

ok127.0.0.1:6379> hgetall user:id:001

1) "g:id:01:nums"

2) "10"

3) "g:id:01:info"

4) ""

redis 應用於搶購,限購類、限量發放優惠卷、啟用碼等業務的資料儲存設計

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

品搶購上限1000張

解決方案:

127.0.0.1:6379> hmset user:id:01 c30 30 c50 50 c100 100

ok127.0.0.1:6379> hincrby user:id:01 c100 -20

(integer) 80

127.0.0.1:6379> hincrby user:id:01 c50 -10

(integer) 40

127.0.0.1:6379> hgetall user:id:01

1) "c30"

2) "30"

3) "c50"

4) "40"

5) "c100"

6) "80"

redis資料型別 hash

hash在redis中是一種比較常用的資料型別,資料儲存結構以key value,可以儲存複雜的資料結構,比如 物件,巢狀 list set zset 資料 命令測試127.0.0.1 6379 127.0.0.1 6379 hset ikang name tom integer 1 127.0.0...

Redis資料型別Hash

hash 型別資料操作的注意事項 hash和string型別的區別 有時候我們往往不是在快取中存乙個值,而是選擇存乙個物件,比如乙個購物車訊息,我們就需要使用到hash了 hash儲存的結構會被優化 如果field數量較少,儲存結構優化為類陣列結構 如果field數量較多,儲存結構使用hashmap...

redis資料型別 Hash型別

hash型別,是乙個string型別的field和value的對映表。hash存放的是鍵值對,可以很方便的存放物件。常用操作 hset 設定hash field為指定值,如果key不存在,則先建立 hset user1 name jack hset uer1 age 18 hget 獲取指定的has...