標籤:sts name 使用者 使用 ... 實戰 字串 使用者id at命令
1.雜湊類型索引值結構
雜湊類型也是key-value結構,key是字串類型,其value分為兩個部分:field和value
其中field部分代表屬性,value代表屬性對應的值
上面的圖裡,user:1:info
為key,name,age,Date
為user這個key的一些屬性,value是屬性對應的值
在hash中,可以為key添加一個新的屬性和新的值
比如使用下面的命令向user:1:info這個key添加一個新屬性viewCounter,屬性對應的值為100
hset user:1:info viewCounter 100
2.特點
key-value結構key(field)不能相同,value可以相同
3.Redis雜湊類型對應的命令3.1 hget命令,hset命令和hdel命令
hget key field 擷取hash key對應的field的valuehset key field value 設定hash key對應的field的valuehdel key field 刪除hash key對應的field的value
例子:
127.0.0.1:6379> hset user:1:info age 23(integer) 1127.0.0.1:6379> hget user:1:info age"23"127.0.0.1:6379> hset user:1:info name python(integer) 1127.0.0.1:6379> hgetall user:1:info1) "age"2) "23"3) "name"4) "python"127.0.0.1:6379> hdel user:1:info age(integer) 1127.0.0.1:6379> hgetall user:1:info1) "name"2) "python"127.0.0.1:6379>
注意事項:
hget命令,hset命令和hdel命令的時間複雜度為O(1)
3.2 hexists命令和hlen命令
hexists key field 判斷hash key是否有fieldhlen key 擷取hash key field的數量
例子:
127.0.0.1:6379> hgetall user:1:info1) "name"2) "python"3) "age"4) "23"127.0.0.1:6379> hexists user:1:info name(integer) 1127.0.0.1:6379> hlen user:1:info(integer) 2
注意事項:
hexists命令和hlen命令的時間複雜度為O(1)
3.3 hmget命令和hmset命令
hmget key field1 field2 ... fieldN 批量擷取hash key的一批field對應的值hmset key field1 value1 field2 value2 ... fieldN valueN 大量設定hash key的一批field value
例子:
127.0.0.1:6379> hmset user:2:info age 30 name mysql page 50OK127.0.0.1:6379> hlen user:2:info(integer) 3127.0.0.1:6379> hmget user:2:info age name1) "30"2) "mysql"127.0.0.1:6379>
注意事項:
hmget命令和hmset命令的時間複雜度為O(1)
3.4 hgetall命令,hvals命令和hkeys命令
hgetall key 返回hash key對應所有的field和valuehvals key 返回hash key對應所有field的valuehkeys key 返回hash key對應所有field
例子:
127.0.0.1:6379> hgetall user:2:info1) "age"2) "30"3) "name"4) "mysql"5) "page"6) "50"127.0.0.1:6379> hvals user:2:info1) "30"2) "mysql"3) "50"127.0.0.1:6379> hkeys user:2:info1) "age"2) "name"3) "page"
注意事項:
hgetall命令,hvals命令和hkeys命令的時間複雜度為O(1)由於Redis的單線程的特點以及hgetall會返回所有的key和value,所以如果hash中儲存的資料過多時,hgetall命令的執行速度會比較慢
3.5 hsetnx命令,hincrby命令和hincrbyfloat命令
hsetnx key field value 設定hash key對應field的value(如field已經存在,則失敗)hincrby key field intCounter hash key對應的field的value自增intCounterhincrbyfloat key field floatCounter hincrby浮點數版
注意事項:
hsetnx命令,hincrby命令和hincrbyfloat命令的時間複雜度為O(1)
4.實戰
記錄網站每個使用者個人首頁的訪問量,也可以使用雜湊類型
這樣可以保證每個使用者的相關資料是一個整體,而使用字串類型儲存的話,則每個使用者個人主面的訪問量與每個使用者的其他資料都是一個分離的狀態。
記錄網站每個使用者個人首頁的訪問量需要根據實際情況來進行設計使用
hincrby user:1:info pageview count
5.使用Redis儲存每個使用者相關的資料,可以使用三種方式5.1 方式一
使用使用者的id為key,把使用者的相關資料進行序列化後並做為value
使用時,根據使用者id擷取對應的資料的字串格式,進行還原序列化後就可以得到使用者相關的資料進行查詢和更新操作
5.2 方式二
使用使用者的id與使用者對應的屬性名稱進行拼接得到新的字串,並做為key,使用者對應屬性的值做為value
這樣,使用者的所有資訊都是分離開的,可以很方便的對使用者的資料進行查詢和更新,並且可以很方便的為使用者添加新的屬性,而不用對原來的屬性有影響
5.3 方式三
使用使用者id做為key,使用者的其他資料都儲存為hash格式,
對使用者的屬性進行查詢,更新和添加都比較方便
儲存使用者相關資料的方式比較
高可用Redis(二):Hash類型