Redis數據類型之Hash哈希類型

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成員的接口
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章