摘要:實例導(dǎo)入包包與本地進(jìn)行鏈接,地址為,端口號為和字符串一樣,對散列中一個尚未存在的鍵執(zhí)行自增操作時,會將鍵的值當(dāng)作來處理。
上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第三節(jié):集合
下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第五節(jié):有序集合
第一章提到過,Redis的散列可以讓用戶將多個鍵值對存儲到一個Redis里面。從功能上來說,Redis為散列值提供了一些與字符串值相同的特性,使得散列非常適用于將一些相關(guān)的數(shù)據(jù)存儲在一起。我們可以把這種數(shù)據(jù)聚集看做是關(guān)系數(shù)據(jù)庫的行,或者文檔數(shù)據(jù)庫的文檔。
本節(jié)將對最常用的散列命令進(jìn)行介紹:其中包括添加和刪除鍵值對的命令、獲取所有鍵值對的命令、已經(jīng)對鍵值對的值進(jìn)行自增或者自減操作的命令。閱讀這一節(jié)可以讓讀者學(xué)習(xí)到如何將數(shù)據(jù)存儲到散列里面,以及這樣做的好處是什么。下表展示了一部分常用的散列命令:
命令 | 用例 | 用例描述 |
---|---|---|
hmget | hmget key-name key [key ...] | 從散列里面獲取一個或多個鍵的值 |
hmset | hmset key-name key value [key value ...] | 為散列里面的一個或多個鍵設(shè)置值 |
hdel | hdel key-name key [key ...] | 刪除散列里面的一個或多個鍵值對,返回成功找到并刪除的鍵值對數(shù)量。 |
hlen | hlen key-name | 返回散列包含的鍵值對數(shù)量。 |
hdel命令已經(jīng)在第一章中介紹過了,而hlen命令以及用于一次讀取或者設(shè)置多個鍵的hmget和hmset則是新出現(xiàn)的命令。像hmget和hmset這種批量處理多個鍵的命令既可以給用戶帶來方便,又可以通過減少命令的調(diào)用次數(shù)以及客戶端與Redis之前的通信往返次數(shù)來提升Redis的性能。
示例:
import redis # 導(dǎo)入redis包包 # 與本地redis進(jìn)行鏈接,地址為: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"))
結(jié)果:
True [b"v2", b"v3"] 4 2
第一章介紹的hget命令和hset命令分別是hmget命令和hmset命令的單參數(shù)版本,這里的命令的唯一區(qū)別在于單參數(shù)版本每次執(zhí)行只能處理一個鍵值對,而多參數(shù)版本的每次執(zhí)行可以處理多個鍵值對。
下表列出了散列的其他幾個批量操作命令,以及一些和字符串操作類似的散列命令。
命令 | 用例 | 用例描述 |
---|---|---|
hexists | hexists key-name key | 檢查給定鍵是否存在于散列中 |
hkeys | hkeys key-name | 獲取散列包含的所有鍵 |
hvals | hvals key-name | 獲取散列包含的所有值 |
hgetall | hgetall key-name | 獲取散列包含的所有鍵值對 |
hincrby | hincrby key-name key increment | 將鍵key存儲的值加上整數(shù)increment |
hincrbyfloat | hincrbyfloat key-name key increment | 將鍵key存儲的值加上浮點數(shù)increment |
盡管有hgetall存在,但hkeys和hvals也是非常有用的:如果散列包含的值非常大,那么用戶可以先使用hkeys取出散列包含的所有鍵,然后再使用hget一個接一個地取出鍵的值,從而避免因為一次獲取多個大體積的值而導(dǎo)致服務(wù)器阻塞。
hincrby和hincrbyfloat可能會讓讀者回想起用于處理字符串的incrby和incrbyfloat,這兩個命令擁有相同的語義,他們的不同在于hincrby和hincrbyfloat處理的是散列,而不是字符串。
實例:
import redis # 導(dǎo)入redis包包 # 與本地redis進(jìn)行鏈接,地址為: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")) #和字符串一樣,對散列中一個尚未存在的鍵執(zhí)行自增操作時,Redis會將鍵的值當(dāng)作0來處理。 print(r.hincrby("hash-key2","num")) print(r.hexists("hash-key2","num"))
結(jié)果:
True [b"short:", b"long"] False 1 True
正如前面所說,在對散列進(jìn)行處理的時候,如果鍵值對的值的體積非常龐大,那么用戶可以先使用hkeys獲取散列的所有鍵,然后通過只獲取必要的值來減少需要傳輸?shù)臄?shù)據(jù)量。除此之外,用戶還可以像使用sismemeber檢查一個元素是否存在于集合里面一樣,使用hexists檢查一個鍵是否存在于散列中。
在接下來的一節(jié)中,我們要了解的是之后的章節(jié)會經(jīng)常用到的有序集合結(jié)構(gòu)。
上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第三節(jié):集合
下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第五節(jié):有序集合
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44873.html
摘要:上一篇文章實戰(zhàn)第三章命令第二節(jié)列表下一篇文章實戰(zhàn)第三章命令第四節(jié)散列 上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第二節(jié):列表下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第四節(jié):散列 Redis的集合以無序的方式來存儲多個各不相同的元素,用戶可以快速地對集合執(zhí)行添加元素操作、移除元素操作、以及檢查一個元素是否存在于集合里。本節(jié)將對最常用...
摘要:對給定的有序集合執(zhí)行類似于集合的并集運算。用戶可以把集合作為輸入傳給和,命令會將集合看作是成員分值全為的有序集合來處理。上一篇文章實戰(zhàn)第三章命令第四節(jié)散列下一篇文章實戰(zhàn)第三章命令第六節(jié)發(fā)布與訂閱 上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第四節(jié):散列下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第六節(jié):發(fā)布與訂閱 和散列存儲著鍵與值之間...
閱讀 2478·2021-09-22 16:05
閱讀 2961·2021-09-10 11:24
閱讀 3632·2019-08-30 12:47
閱讀 2941·2019-08-29 15:42
閱讀 3379·2019-08-29 15:32
閱讀 1946·2019-08-26 11:48
閱讀 1082·2019-08-23 14:40
閱讀 902·2019-08-23 14:33