高可用Redis(二):Hash類型

來源:互聯網
上載者:User

標籤: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類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.