成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第一節(jié):字符串

HelKyle / 1661人閱讀

摘要:對(duì)字符串執(zhí)行自增和自減操作的實(shí)例導(dǎo)入包包與本地進(jìn)行鏈接,地址為,端口號(hào)為嘗試獲取一個(gè)不存在的鍵將得到一個(gè)值。上一篇文章實(shí)戰(zhàn)第二章使用構(gòu)建應(yīng)用第五節(jié)網(wǎng)頁分析下一篇文章實(shí)戰(zhàn)第三章命令第二節(jié)列表

上一篇文章: Python--Redis實(shí)戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第五節(jié):網(wǎng)頁分析
下一篇文章:Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第二節(jié):列表

在Redis里面,字符串可以存儲(chǔ)以下三種類型的值:

字節(jié)串【byte string】

整數(shù)

浮點(diǎn)數(shù)

用戶可以通過給定一個(gè)任意的數(shù)值,對(duì)存儲(chǔ)著整數(shù)或者浮點(diǎn)數(shù)的字符串執(zhí)行自增【increment】或者自減【decrement】操作,在有需要的時(shí)候,Redis還好將整數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù)。整數(shù)的取值范圍和系統(tǒng)的長整數(shù)【long integer】的取值范圍相同【在32位系統(tǒng)上,整數(shù)就是32位有符號(hào)整數(shù),在64位系統(tǒng)上,整數(shù)就是64位有符號(hào)整數(shù)】,而浮點(diǎn)數(shù)的取值范圍和精度則與IEEE754標(biāo)準(zhǔn)的雙精度浮點(diǎn)數(shù)【double】相同。Redis明確的區(qū)分字節(jié)串、整數(shù)和浮點(diǎn)數(shù)的做法是一種優(yōu)勢(shì),比起只能夠存儲(chǔ)字節(jié)串的做法,Redis的做法在數(shù)據(jù)表現(xiàn)方面具有更大的靈活性。

本節(jié)將對(duì)Redis里面最簡(jiǎn)單的結(jié)構(gòu):字符串進(jìn)行討論,介紹基本的數(shù)值自增和自減操作,以及二進(jìn)制位【bit】和子串【substring】處理命令,讀者可能會(huì)驚訝的發(fā)現(xiàn),Redis里面最簡(jiǎn)單的機(jī)構(gòu)居然也有如此強(qiáng)大的作用。

下表展示了對(duì)Redis字符串執(zhí)行自增和自減操作的命令:

命令 用例 用例描述
incr incr key-name 將鍵存儲(chǔ)的值+1
decr decr key-name 將鍵存儲(chǔ)的值-1
incrby incrby key-name amount 將鍵存儲(chǔ)的值加上整數(shù)amount
decrby decrby key-name amount 將鍵存儲(chǔ)的值減去整數(shù)amount
incrbyfloat incrbyfloat key-name amount 將鍵存儲(chǔ)的值加上浮點(diǎn)數(shù)amount,這個(gè)命令在Redis2.6或以上的版本可用。

當(dāng)用戶將一個(gè)值存儲(chǔ)到Redis字符串里面的時(shí)候,如果這個(gè)值可以被解釋【interpret】為十進(jìn)制或者浮點(diǎn)數(shù),那么Redis會(huì)察覺到這一點(diǎn),并允許用戶對(duì)這個(gè)字符串執(zhí)行各種【incr*】和【decr*】操作。

如果用戶對(duì)一個(gè)不存在的鍵或者一個(gè)保存了空串的鍵執(zhí)行自增或者自減操作,那么Redis在執(zhí)行操作時(shí)會(huì)將這個(gè)鍵的值當(dāng)做是0來處理。

如果用戶嘗試對(duì)一個(gè)值無法被解釋為整數(shù)或者浮點(diǎn)數(shù)的字符串執(zhí)行自增或者自減操作,那么Redis將想用戶返回一個(gè)錯(cuò)誤。

對(duì)字符串執(zhí)行自增和自減操作的實(shí)例:
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)

r.delete("key")
#嘗試獲取一個(gè)不存在的鍵將得到一個(gè)None值。
print(r.get("key"))

#對(duì)不存在的鍵執(zhí)行自增操作
print(r.incr("key"))
print(r.incr("key",15))

#執(zhí)行自減操作
print(r.decr("key",5))

print(r.get("key"))

print(r.set("key",99))
print(r.incr("key"))

運(yùn)行結(jié)果:

None
1
16
11
b"11"
True
100
讀者可能會(huì)發(fā)現(xiàn)本書只調(diào)用了incr(),這是因?yàn)镻ythin的Redis庫在內(nèi)部使用incrby命令來實(shí)現(xiàn)incr()方法,并且這個(gè)方法的第二個(gè)參數(shù)是可選的:如果用戶沒有為這個(gè)可選參數(shù)設(shè)置值,那么這個(gè)參數(shù)就會(huì)使用默認(rèn)值1.

除了自增操作和自減操作之外,Redis還擁有對(duì)字符串的其中一部分內(nèi)容進(jìn)行讀取或者寫入的操作(這些操作也可以用于整數(shù)或者浮點(diǎn)數(shù),但這種用法并不常見)。下表展示了用來處理字符串子串和二進(jìn)制位的命令:

命令 用例 用例描述
append append key-namr value 將值value追加到給定鍵key-name當(dāng)前存儲(chǔ)的值得尾部
getrange getrange key-name start end 獲取一個(gè)由偏移量start至偏移量end范圍內(nèi)所有字符組成的子串,包括start和end在內(nèi)
setrange setrange key-name offset value 將從start偏移量開始的子串設(shè)置為給定值
getbit getbit key-name offset 將字節(jié)串看做是二進(jìn)制位串【bit string】,并返回位串中偏移量為offset的二進(jìn)制位的值
setbit setbit key-name offset value 將字節(jié)串看做是二進(jìn)制位串,并將位串中偏移量為offset的二進(jìn)制位設(shè)置為value
bitcount bitcount key-name [start end] 統(tǒng)計(jì)二進(jìn)制位串里面值為1的二進(jìn)制位的數(shù)量,如果給定了可選的start偏移量和end偏移量,那么只對(duì)偏移量范圍內(nèi)的二進(jìn)制位進(jìn)行統(tǒng)計(jì)
bitop bitop operation dest-key key-name [key-namr ...] 對(duì)一個(gè)或多個(gè)二進(jìn)制位串執(zhí)行包括并【and】、或【or】、異或【xor】、非【not】在內(nèi)的任意一種按位運(yùn)算操作,并將計(jì)算得出的結(jié)果保存在dest-key鍵里面
Redis現(xiàn)在的getrange命令是由以前的substr命令改名而來的,因此,Python客戶端至今仍然可以使用substr()方法來獲取子串,但如果讀者使用的是2.6或以上版本的Redis,那么最好是使用getrang()方法獲取子串。

在使用setrange或者setbit命令對(duì)字符串進(jìn)行寫入的時(shí)候,如果字符串當(dāng)前的長度不能滿足寫入的要求,那么Redis會(huì)自動(dòng)地使用空字節(jié)(null)來將字符串?dāng)U展至所需的長度,然后才執(zhí)行寫入或者更新操作。在使用getrange讀取字符串的時(shí)候,超出字符串末尾的數(shù)據(jù)會(huì)被視為是空串,而在使用getbit讀取二進(jìn)制位串的時(shí)候,超出字符串末尾的二進(jìn)制位會(huì)被視為是0.

Redis的子串操作和二進(jìn)制位操作實(shí)例
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)

r.delete("new-string-key")
r.delete("another-key")

#將字符串"hello"追加到目前并不存在的"new-string-key"鍵里。
print(r.append("new-string-key","hello"))

print(r.append("new-string-key","-world!"))

#獲取字串
print(r.substr("new-string-key",3,7))

#對(duì)字符串執(zhí)行范圍設(shè)置操作,setrange會(huì)返回字符串的當(dāng)前長度
print(r.setrange("new-string-key",0,"H"))
print(r.setrange("new-string-key",6,"W"))

print(r.get("new-string-key"))

#移除了!號(hào)并在后面添加了新的字符:--how are you?
print(r.setrange("new-string-key",11,"--how are you?"))

print(r.get("new-string-key"))

#setbit命令會(huì)返回二進(jìn)制位被設(shè)置之前的值
#對(duì)超出字符串長度的二進(jìn)制位進(jìn)行設(shè)置時(shí),超出部分會(huì)被填充為空字節(jié)
print(r.setbit("another-key",2,1))
print(r.setbit("another-key",7,1))
#通過將第2個(gè)二進(jìn)制位以及第7個(gè)二進(jìn)制位的值設(shè)置位1,鍵的值將變?yōu)?!",也就是便秘為33的字符。
print(r.get("another-key"))

運(yùn)行結(jié)果:

5
12
b"lo-wo"
12
12
b"Hello-World!"
25
b"Hello-World--how are you?"
0
0
b"!"

很多鍵值數(shù)據(jù)庫只能講數(shù)據(jù)存儲(chǔ)為普通的字符串,并且不提供任何字符串處理操作,有一些鍵值數(shù)據(jù)庫運(yùn)行用戶將字節(jié)追加到字符串的前面后者后面,但是卻沒有辦法像Redis一樣對(duì)字符串的子串進(jìn)行讀寫。從很多方面來講,即使Redis只支持字符串結(jié)構(gòu),并且只支持本節(jié)列出的字符串處理命令,Redis也比很多別的數(shù)據(jù)庫要強(qiáng)大的多;通過使用子串操作或二進(jìn)制位操作,配合watch命令、multi命令和exec命令,用戶甚至可以手動(dòng)去構(gòu)建任何他們想要的數(shù)據(jù)結(jié)構(gòu)。后面我們會(huì)介紹如何使用字符串去存儲(chǔ)一種簡(jiǎn)單的映射,這種映射可以在某些情況下節(jié)省大量?jī)?nèi)存。

只要花些心思,我們甚至可以將字符串當(dāng)作列表來使用,但這種做法能夠執(zhí)行的列表操作并不多,更好的方法時(shí)直接使用下面我們將要介紹的列表結(jié)構(gòu),Redis為這種結(jié)構(gòu)提供了豐富的列表操作命令。

上一篇文章: Python--Redis實(shí)戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第五節(jié):網(wǎng)頁分析
下一篇文章:Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第二節(jié):列表

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42585.html

相關(guān)文章

  • Python--Redis實(shí)戰(zhàn)第一章:初識(shí)Redis一節(jié)Redis簡(jiǎn)介

    摘要:上一篇文章實(shí)戰(zhàn)安裝下一篇文章實(shí)戰(zhàn)第一章初識(shí)第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介是一個(gè)遠(yuǎn)程內(nèi)存數(shù)據(jù)庫,它不僅性能強(qiáng)勁,而且還具有復(fù)制特性以及為解決問題而生的獨(dú)一無二的數(shù)據(jù)模型,是一個(gè)速度非常快的非關(guān)系數(shù)據(jù)庫。 上一篇文章:Pyhton--Redis實(shí)戰(zhàn):Mac brew安裝redis下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介 Redis是一個(gè)遠(yuǎn)程內(nèi)...

    enali 評(píng)論0 收藏0
  • Python--Redis實(shí)戰(zhàn)三章Redis命令:第二節(jié):列表

    摘要:上一篇文章實(shí)戰(zhàn)第三章命令第一節(jié)字符串下一篇文章實(shí)戰(zhàn)第三章命令第三節(jié)集合在之前我們介紹過,的列表允許用戶從序列的兩端推入或者彈出元素獲取列表元素以及執(zhí)行各種常見的列表操作。 上一篇文章: Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第一節(jié):字符串下一篇文章:Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第三節(jié):集合 在之前我們介紹過,Redis的列表允許用戶從序列...

    superPershing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<