Python--Redis實戰:第三章:Redis命令:第四節:散列

上一篇文章: Python--Redis實戰:第三章:Redis命令:第三節:集合
下一篇文章: Python--Redis實戰:第三章:Redis命令:第五節:有序集合

第一章提到過,Redis的散列可讓用戶將多個鍵值對存儲到一個Redis裏面。從功能上來講,Redis爲散列值提供了一些與字符串值相同的特性,使得散列很是適用於將一些相關的數據存儲在一塊兒。咱們能夠把這種數據彙集看作是關係數據庫的行,或者文檔數據庫的文檔。redis

本節將對最經常使用的散列命令進行介紹:其中包括添加和刪除鍵值對的命令、獲取全部鍵值對的命令、已經對鍵值對的值進行自增或者自減操做的命令。閱讀這一節可讓讀者學習到如何將數據存儲到散列裏面,以及這樣作的好處是什麼。下表展現了一部分經常使用的散列命令:數據庫

命令 用例 用例描述
hmget hmget key-name key [key ...] 從散列裏面獲取一個或多個鍵的值
hmset hmset key-name key value [key value ...] 爲散列裏面的一個或多個鍵設置值
hdel hdel key-name key [key ...] 刪除散列裏面的一個或多個鍵值對,返回成功找到並刪除的鍵值對數量。
hlen hlen key-name 返回散列包含的鍵值對數量。

hdel命令已經在第一章中介紹過了,而hlen命令以及用於一次讀取或者設置多個鍵的hmget和hmset則是新出現的命令。像hmget和hmset這種批量處理多個鍵的命令既能夠給用戶帶來方便,又能夠經過減小命令的調用次數以及客戶端與Redis以前的通訊往返次數來提高Redis的性能。segmentfault

示例:服務器

import redis # 導入redis包包

# 與本地redis進行連接,地址爲:localhost,端口號爲6379
r = redis.StrictRedis(host='localhost', port=6379)


values = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
#使用hmset命令能夠一次將多個鍵值對添加多散列裏面
print(r.hmset('hash-key', values))

keys = ['k2', 'k3']
#使用hmset命令能夠一次獲取多個鍵的值
print(r.hmget('hash-key', keys))


print(r.hlen('hash-key'))

print(r.hdel('hash-key','k1','k3'))

結果:性能

True
[b'v2', b'v3']
4
2

第一章介紹的hget命令和hset命令分別是hmget命令和hmset命令的單參數版本,這裏的命令的惟一區別在於單參數版本每次執行只能處理一個鍵值對,而多參數版本的每次執行能夠處理多個鍵值對。學習

下表列出了散列的其餘幾個批量操做命令,以及一些和字符串操做相似的散列命令。code

命令 用例 用例描述
hexists hexists key-name key 檢查給定鍵是否存在於散列中
hkeys hkeys key-name 獲取散列包含的全部鍵
hvals hvals key-name 獲取散列包含的全部值
hgetall hgetall key-name 獲取散列包含的全部鍵值對
hincrby hincrby key-name key increment 將鍵key存儲的值加上整數increment
hincrbyfloat hincrbyfloat key-name key increment 將鍵key存儲的值加上浮點數increment

儘管有hgetall存在,但hkeys和hvals也是很是有用的:若是散列包含的值很是大,那麼用戶能夠先使用hkeys取出散列包含的全部鍵,而後再使用hget一個接一個地取出鍵的值,從而避免由於一次獲取多個大致積的值而致使服務器阻塞。rem

hincrby和hincrbyfloat可能會讓讀者回想起用於處理字符串的incrby和incrbyfloat,這兩個命令擁有相同的語義,他們的不一樣在於hincrby和hincrbyfloat處理的是散列,而不是字符串。文檔

實例:字符串

import redis # 導入redis包包


# 與本地redis進行連接,地址爲:localhost,端口號爲6379
r = redis.StrictRedis(host='localhost', port=6379)

r.delete('hash-key2')

print(r.hmset('hash-key2',{'short:':'hello','long':1000*'1'}))

print(r.hkeys('hash-key2'))

print(r.hexists('hash-key2','num'))

#和字符串同樣,對散列中一個還沒有存在的鍵執行自增操做時,Redis會將鍵的值看成0來處理。
print(r.hincrby('hash-key2','num'))

print(r.hexists('hash-key2','num'))

結果:

True
[b'short:', b'long']
False
1
True

正如前面所說,在對散列進行處理的時候,若是鍵值對的值的體積很是龐大,那麼用戶能夠先使用hkeys獲取散列的全部鍵,而後經過只獲取必要的值來減小須要傳輸的數據量。除此以外,用戶還能夠像使用sismemeber檢查一個元素是否存在於集合裏面同樣,使用hexists檢查一個鍵是否存在於散列中。

在接下來的一節中,咱們要了解的是以後的章節會常常用到的有序集合結構。

上一篇文章: Python--Redis實戰:第三章:Redis命令:第三節:集合
下一篇文章: Python--Redis實戰:第三章:Redis命令:第五節:有序集合
相關文章
相關標籤/搜索