亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1130
2022-05-29
2.2. 哈希(Hash)
2.2.1. 簡介
Redis hash 是一個string類型的field和value的映射表,hash特別適合用于存儲對象。
Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)
可以看成具有KEY和VALUE的MAP容器,該類型非常適合于存儲值對象的信息,
如:uname,upass,age等。該類型的數據僅占用很少的磁盤空間(相比于JSON)
該類型與java中的object(map)有些類似
2.2.2. Hash命令
賦值語法:
HSET KEY FIELD VALUE //為指定的KEY,設定FILD/VALUE
HMSET KEY FIELD VALUE [FIELD1,VALUE1]…… 同時將多個 field-value (域-值)對設置到哈希表 key 中。
取值語法:
HGET KEY FIELD //獲取存儲在HASH中的值,根據FIELD得到VALUE
HMGET key field[field1] //獲取key所有給定字段的值
HGETALL key //返回HASH表中所有的字段和值
HKEYS key //獲取所有哈希表中的字段
HLEN key //獲取哈希表中字段的數量
type key //查看key類型
全部刪除:del key
刪除語法:
HDEL KEY field1[field2] //刪除一個或多個HASH表字段
其它語法:
HSETNX key field value
只有在字段 field 不存在時,設置哈希表字段的值
HINCRBY key field increment
為哈希表 key 中的指定字段的整數值加上增量 increment 。
HINCRBYFLOAT key field increment
為哈希表 key 中的指定字段的浮點數值加上增量 increment 。
HEXISTS key field //查看哈希表 key 中,指定的字段是否存在
2.2.3. 應用場景:
Hash的應用場景:(存儲一個用戶信息對象數據)
1、 常用于存儲一個對象
2、 為什么不用string存儲一個對象?
hash是最接近關系數據庫結構的數據類型,可以將數據庫一條記錄或程序中一個對象轉換成hashmap存放在redis中。
用戶ID為查找的key,存儲的value用戶對象包含姓名,年齡,生日等信息,如果用普通的key/value結構來存儲,主要有以下2種存儲方式:
第一種方式將用戶ID作為查找key,把其他信息封裝成一個對象以序列化的方式存儲,這種方式的缺點是,增加了序列化/反序列化的開銷,并且在需要修改其中一項信息時,需要把整個對象取回,并且修改操作需要對并發進行保護,引入CAS等復雜問題。
第二種方法是這個用戶信息對象有多少成員就存成多少個key-value對兒,用用戶ID+對應屬性的名稱作為唯一標識來取得對應屬性的值,雖然省去了序列化開銷和并發問題,但是用戶ID為重復存儲,如果存在大量這樣的數據,內存浪費還是非常可觀的。
總結:
Redis提供的Hash很好的解決了這個問題,Redis的Hash實際是內部存儲的Value為一個HashMap,并提供了直接存取這個Map成員的接口
Redis 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。