哈希類型也是key-value結構,key是字符串類型,其value分爲兩個部分:field和value
其中field部分表明屬性,value表明屬性對應的值python
上面的圖裏,user:1:info
爲key,name,age,Date
爲user這個key的一些屬性,value是屬性對應的值mysql
在hash中,能夠爲key添加一個新的屬性和新的值redis
好比使用下面的命令向user:1:info這個key添加一個新屬性viewCounter,屬性對應的值爲100sql
hset user:1:info viewCounter 100
key-value結構 key(field)不能相同,value能夠相同
hget key field 獲取hash key對應的field的value hset key field value 設置hash key對應的field的value hdel key field 刪除hash key對應的field的value
例子:網站
127.0.0.1:6379> hset user:1:info age 23 (integer) 1 127.0.0.1:6379> hget user:1:info age "23" 127.0.0.1:6379> hset user:1:info name python (integer) 1 127.0.0.1:6379> hgetall user:1:info 1) "age" 2) "23" 3) "name" 4) "python" 127.0.0.1:6379> hdel user:1:info age (integer) 1 127.0.0.1:6379> hgetall user:1:info 1) "name" 2) "python" 127.0.0.1:6379>
注意事項:線程
hget命令,hset命令和hdel命令的時間複雜度爲O(1)
hexists key field 判斷hash key是否有field hlen key 獲取hash key field的數量
例子:設計
127.0.0.1:6379> hgetall user:1:info 1) "name" 2) "python" 3) "age" 4) "23" 127.0.0.1:6379> hexists user:1:info name (integer) 1 127.0.0.1:6379> hlen user:1:info (integer) 2
注意事項:code
hexists命令和hlen命令的時間複雜度爲O(1)
hmget key field1 field2 ... fieldN 批量獲取hash key的一批field對應的值 hmset key field1 value1 field2 value2 ... fieldN valueN 批量設置hash key的一批field value
例子:blog
127.0.0.1:6379> hmset user:2:info age 30 name mysql page 50 OK 127.0.0.1:6379> hlen user:2:info (integer) 3 127.0.0.1:6379> hmget user:2:info age name 1) "30" 2) "mysql" 127.0.0.1:6379>
注意事項:字符串
hmget命令和hmset命令的時間複雜度爲O(1)
hgetall key 返回hash key對應全部的field和value hvals key 返回hash key對應全部field的value hkeys key 返回hash key對應全部field
例子:
127.0.0.1:6379> hgetall user:2:info 1) "age" 2) "30" 3) "name" 4) "mysql" 5) "page" 6) "50" 127.0.0.1:6379> hvals user:2:info 1) "30" 2) "mysql" 3) "50" 127.0.0.1:6379> hkeys user:2:info 1) "age" 2) "name" 3) "page"
注意事項:
hgetall命令,hvals命令和hkeys命令的時間複雜度爲O(1) 因爲Redis的單線程的特色以及hgetall會返回全部的key和value,因此若是hash中存儲的數據過多時,hgetall命令的執行速度會比較慢
hsetnx key field value 設置hash key對應field的value(如field已經存在,則失敗) hincrby key field intCounter hash key對應的field的value自增intCounter hincrbyfloat key field floatCounter hincrby浮點數版
注意事項:
hsetnx命令,hincrby命令和hincrbyfloat命令的時間複雜度爲O(1)
記錄網站每一個用戶我的主頁的訪問量,也可使用哈希類型
這樣能夠保證每一個用戶的相關數據是一個總體,而使用字符串類型保存的話,則每一個用戶我的主面的訪問量與每一個用戶的其餘數據都是一個分離的狀態。
記錄網站每一個用戶我的主頁的訪問量須要根據實際狀況來進行設計使用
hincrby user:1:info pageview count
使用用戶的id爲key,把用戶的相關數據進行序列化後並作爲value
使用時,根據用戶id獲取對應的數據的字符串格式,進行反序列化後就能夠獲得用戶相關的數據進行查詢和更新操做
使用用戶的id與用戶對應的屬性名進行拼接獲得新的字符串,並作爲key,用戶對應屬性的值作爲value
這樣,用戶的全部信息都是分離開的,能夠很方便的對用戶的數據進行查詢和更新,而且能夠很方便的爲用戶添加新的屬性,而不用對原來的屬性有影響
使用用戶id作爲key,用戶的其餘數據都保存爲hash格式,
對用戶的屬性進行查詢,更新和添加都比較方便
保存用戶相關數據的方式比較