概述
Redis本身就是鍵值對結構,而Redis中的value可以是哈希類型,為了區分這兩個鍵值對,Redis中的鍵值對是key-value,而value中的哈希鍵值對則是field-value,其中value必須是字符串
下面介紹一些Redis的hash類型的常用命令
hset
設置對應的key,field,value,返回設置成功的field-value的個數
hget
返回key下的field對應的value
演示:
hexists
返回key下的field是否存在,存在返回1,不存在返回0
演示:
hdel
刪除hash中的指定字段(del刪除的是key,而hdel刪除的是field),返回成功刪除的個數
演示:
如果使用的是del,則key對應的所有hash都會被刪除
hkeys
獲取hash中全部的field(這個操作會先根據key找到對應的hash,然后再遍歷hash)
演示:
這個操作實質上相當于keys *,因此如果field過多,會造成Redis服務器被阻塞
hvals
獲取hash中全部的value,也有可能造成Redis服務器阻塞
演示:
hgetall
獲取所有的field和value,每個field和對應的value交替展示
演示:
hmget
獲取key下指定的field對應的value,value的順序和給定的field的順序一致
演示:
hlen
獲取對應key下hash的元素的個數,時間復雜度O(1)
演示:
hsetnx
類似于string類型中的setnx,如果filed不存在則插入hash成功,否則插入失敗
演示:
hincrby
類似于string類型中的incrby,可以將hash中field對應的value當作整數,進行加減操作
演示:
hincrbyfloat
類似于string類型中的incrbyfloat,可以將hash中field對應的value當作小數,進行加減操作
演示:
hstrlen
獲取value的字符串長度
演示:
編碼方式
編碼方式 | 說明 |
---|---|
ziplist | 壓縮列表,當哈希類型元素個數小于512個,所有值小于64字節時使用,更加節省內存 |
hashtable | 哈希表,不滿足ziplist時使用 |
壓縮的本質是對數據重新編碼,結合數據的特點,精妙的設計可以使數據重新編碼后縮小體積
而ziplist通過一些壓縮算法就可以節省內存空間,但是讀寫的速度會變慢
應用場景
緩存
hash類型同樣適合作為緩存來存儲數據,并且還可以更好的存儲結構化的數據
string類型雖然也能通過json類型存儲這樣結構化數據,但是如果需要修改數據,需要將整個數據都讀出來,修改后再存儲回去,顯然沒有使用hash類型更加輕量化