摘要:對字符串執行自增和自減操作的實例導入包包與本地進行鏈接,地址為,端口號為嘗試獲取一個不存在的鍵將得到一個值。上一篇文章實戰第二章使用構建應用第五節網頁分析下一篇文章實戰第三章命令第二節列表
上一篇文章: Python--Redis實戰:第二章:使用Redis構建Web應用:第五節:網頁分析
下一篇文章:Python--Redis實戰:第三章:Redis命令:第二節:列表
在Redis里面,字符串可以存儲以下三種類型的值:
字節串【byte string】
整數
浮點數
用戶可以通過給定一個任意的數值,對存儲著整數或者浮點數的字符串執行自增【increment】或者自減【decrement】操作,在有需要的時候,Redis還好將整數轉換成浮點數。整數的取值范圍和系統的長整數【long integer】的取值范圍相同【在32位系統上,整數就是32位有符號整數,在64位系統上,整數就是64位有符號整數】,而浮點數的取值范圍和精度則與IEEE754標準的雙精度浮點數【double】相同。Redis明確的區分字節串、整數和浮點數的做法是一種優勢,比起只能夠存儲字節串的做法,Redis的做法在數據表現方面具有更大的靈活性。
本節將對Redis里面最簡單的結構:字符串進行討論,介紹基本的數值自增和自減操作,以及二進制位【bit】和子串【substring】處理命令,讀者可能會驚訝的發現,Redis里面最簡單的機構居然也有如此強大的作用。
下表展示了對Redis字符串執行自增和自減操作的命令:
命令 | 用例 | 用例描述 |
---|---|---|
incr | incr key-name | 將鍵存儲的值+1 |
decr | decr key-name | 將鍵存儲的值-1 |
incrby | incrby key-name amount | 將鍵存儲的值加上整數amount |
decrby | decrby key-name amount | 將鍵存儲的值減去整數amount |
incrbyfloat | incrbyfloat key-name amount | 將鍵存儲的值加上浮點數amount,這個命令在Redis2.6或以上的版本可用。 |
當用戶將一個值存儲到Redis字符串里面的時候,如果這個值可以被解釋【interpret】為十進制或者浮點數,那么Redis會察覺到這一點,并允許用戶對這個字符串執行各種【incr*】和【decr*】操作。
如果用戶對一個不存在的鍵或者一個保存了空串的鍵執行自增或者自減操作,那么Redis在執行操作時會將這個鍵的值當做是0來處理。
如果用戶嘗試對一個值無法被解釋為整數或者浮點數的字符串執行自增或者自減操作,那么Redis將想用戶返回一個錯誤。
對字符串執行自增和自減操作的實例:import redis #導入redis包包 #與本地redis進行鏈接,地址為:localhost,端口號為6379 r=redis.StrictRedis(host="localhost",port=6379) r.delete("key") #嘗試獲取一個不存在的鍵將得到一個None值。 print(r.get("key")) #對不存在的鍵執行自增操作 print(r.incr("key")) print(r.incr("key",15)) #執行自減操作 print(r.decr("key",5)) print(r.get("key")) print(r.set("key",99)) print(r.incr("key"))
運行結果:
None 1 16 11 b"11" True 100
讀者可能會發現本書只調用了incr(),這是因為Pythin的Redis庫在內部使用incrby命令來實現incr()方法,并且這個方法的第二個參數是可選的:如果用戶沒有為這個可選參數設置值,那么這個參數就會使用默認值1.
除了自增操作和自減操作之外,Redis還擁有對字符串的其中一部分內容進行讀取或者寫入的操作(這些操作也可以用于整數或者浮點數,但這種用法并不常見)。下表展示了用來處理字符串子串和二進制位的命令:
命令 | 用例 | 用例描述 |
---|---|---|
append | append key-namr value | 將值value追加到給定鍵key-name當前存儲的值得尾部 |
getrange | getrange key-name start end | 獲取一個由偏移量start至偏移量end范圍內所有字符組成的子串,包括start和end在內 |
setrange | setrange key-name offset value | 將從start偏移量開始的子串設置為給定值 |
getbit | getbit key-name offset | 將字節串看做是二進制位串【bit string】,并返回位串中偏移量為offset的二進制位的值 |
setbit | setbit key-name offset value | 將字節串看做是二進制位串,并將位串中偏移量為offset的二進制位設置為value |
bitcount | bitcount key-name [start end] | 統計二進制位串里面值為1的二進制位的數量,如果給定了可選的start偏移量和end偏移量,那么只對偏移量范圍內的二進制位進行統計 |
bitop | bitop operation dest-key key-name [key-namr ...] | 對一個或多個二進制位串執行包括并【and】、或【or】、異或【xor】、非【not】在內的任意一種按位運算操作,并將計算得出的結果保存在dest-key鍵里面 |
Redis現在的getrange命令是由以前的substr命令改名而來的,因此,Python客戶端至今仍然可以使用substr()方法來獲取子串,但如果讀者使用的是2.6或以上版本的Redis,那么最好是使用getrang()方法獲取子串。
在使用setrange或者setbit命令對字符串進行寫入的時候,如果字符串當前的長度不能滿足寫入的要求,那么Redis會自動地使用空字節(null)來將字符串擴展至所需的長度,然后才執行寫入或者更新操作。在使用getrange讀取字符串的時候,超出字符串末尾的數據會被視為是空串,而在使用getbit讀取二進制位串的時候,超出字符串末尾的二進制位會被視為是0.
Redis的子串操作和二進制位操作實例import redis #導入redis包包 #與本地redis進行鏈接,地址為:localhost,端口號為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)) #對字符串執行范圍設置操作,setrange會返回字符串的當前長度 print(r.setrange("new-string-key",0,"H")) print(r.setrange("new-string-key",6,"W")) print(r.get("new-string-key")) #移除了!號并在后面添加了新的字符:--how are you? print(r.setrange("new-string-key",11,"--how are you?")) print(r.get("new-string-key")) #setbit命令會返回二進制位被設置之前的值 #對超出字符串長度的二進制位進行設置時,超出部分會被填充為空字節 print(r.setbit("another-key",2,1)) print(r.setbit("another-key",7,1)) #通過將第2個二進制位以及第7個二進制位的值設置位1,鍵的值將變為"!",也就是便秘為33的字符。 print(r.get("another-key"))
運行結果:
5 12 b"lo-wo" 12 12 b"Hello-World!" 25 b"Hello-World--how are you?" 0 0 b"!"
很多鍵值數據庫只能講數據存儲為普通的字符串,并且不提供任何字符串處理操作,有一些鍵值數據庫運行用戶將字節追加到字符串的前面后者后面,但是卻沒有辦法像Redis一樣對字符串的子串進行讀寫。從很多方面來講,即使Redis只支持字符串結構,并且只支持本節列出的字符串處理命令,Redis也比很多別的數據庫要強大的多;通過使用子串操作或二進制位操作,配合watch命令、multi命令和exec命令,用戶甚至可以手動去構建任何他們想要的數據結構。后面我們會介紹如何使用字符串去存儲一種簡單的映射,這種映射可以在某些情況下節省大量內存。
只要花些心思,我們甚至可以將字符串當作列表來使用,但這種做法能夠執行的列表操作并不多,更好的方法時直接使用下面我們將要介紹的列表結構,Redis為這種結構提供了豐富的列表操作命令。
上一篇文章: Python--Redis實戰:第二章:使用Redis構建Web應用:第五節:網頁分析
下一篇文章:Python--Redis實戰:第三章:Redis命令:第二節:列表
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42585.html
摘要:上一篇文章實戰安裝下一篇文章實戰第一章初識第二節數據結構簡介是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型,是一個速度非常快的非關系數據庫。 上一篇文章:Pyhton--Redis實戰:Mac brew安裝redis下一篇文章:Python--Redis實戰:第一章:初識Redis:第二節:Redis數據結構簡介 Redis是一個遠程內...
摘要:上一篇文章實戰第三章命令第一節字符串下一篇文章實戰第三章命令第三節集合在之前我們介紹過,的列表允許用戶從序列的兩端推入或者彈出元素獲取列表元素以及執行各種常見的列表操作。 上一篇文章: Python--Redis實戰:第三章:Redis命令:第一節:字符串下一篇文章:Python--Redis實戰:第三章:Redis命令:第三節:集合 在之前我們介紹過,Redis的列表允許用戶從序列...
閱讀 1370·2021-11-22 09:34
閱讀 2581·2021-11-12 10:36
閱讀 1111·2021-11-11 16:55
閱讀 2324·2020-06-22 14:43
閱讀 1457·2019-08-30 15:55
閱讀 1975·2019-08-30 15:53
閱讀 1764·2019-08-30 10:50
閱讀 1217·2019-08-29 12:15