對一系列儲存的資料進行編組,方便管理,典型應用儲存物件資訊
乙個儲存空間儲存多個鍵值對資料
底層使用雜湊表結構實現資料儲存
注意: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...