| 儲存文字,儲存數(shù)字(整數(shù),浮點數(shù)),二進(jìn)制數(shù) | 字符串操作 -- 設(shè)置字符串 set key value # 如果字符串鍵key已經(jīng)存在, 那么使用新值覆蓋原來的舊值 -- 獲取字符串 get key # 返回字符串鍵key儲存的值 -- 僅在鍵不存在的情況下進(jìn)行設(shè)置 setnx key value # 僅在鍵key不存在的情況下,將鍵key的值設(shè)置為value, 效果和set key value NX一樣。NX的意思為"Not exists"。 # 鍵不存在并且設(shè)置成功時命名返回1; 因為鍵已經(jīng)存在而導(dǎo)致設(shè)置失敗時,命令返回0。 -- 同時設(shè)置或獲取多個字符鍵的值 mset key value...(key value) mget key value...(key value) # 多個get,set同時執(zhí)行一樣 -- 一次設(shè)置多個不存在的鍵 msetnx key value [key value...] # 只有在所有給定鍵都不存在的情況下,給所有給定鍵設(shè)置值, 效果和同時執(zhí)行多個setnx一樣。如果給定的鍵至少有一個是 存在的,那么msetnx將不執(zhí)行任何設(shè)置操作。 -- 設(shè)置新值并返回舊值 getset key new-value # 將字符串鍵的值設(shè)置為new-value,并返回字符串鍵在設(shè)置新值 之前儲存的舊值(old value)。 -- 追加內(nèi)容到字符串末尾 append key value # 將值value推入到字符串鍵key已儲存內(nèi)容的末尾 -- 返回值得長度 strlen key # 返回字符串鍵key儲存的值的長度 | 鍵的命名 # 因為redis的數(shù)據(jù)不能同時出現(xiàn)兩個同名的鍵,所以 我們通常會使用field1::field2::field3這樣的格式來區(qū)分 同一類型的多個字符串鍵。最好統(tǒng)一使用符號。 如:網(wǎng)站用戶對應(yīng)的郵件地址: huangz::email鍵,peter::email 鍵來區(qū)分。 (也可以選用自己喜歡的其他分隔符) | 字符串索引(正,負(fù)) -- 范圍設(shè)置 setrange key index value # 從索引index開始,用value復(fù)寫(overwrite)給定值key 所儲存的字符串值。只接受正數(shù)索引。 命令返回復(fù)寫之后,字符串的長度 -- 范圍取值 getrange key start end # 返回鍵key儲存的字符串值中,位于start和end兩個索引 之間的內(nèi)容(閉區(qū)間),范圍取值的索引可以是正數(shù)或者負(fù)數(shù)。 | 設(shè)置和獲取數(shù)字 # 只要儲存在字符串鍵里面的值可以被解釋為64位整數(shù),或者IEEE-754 的64位浮點數(shù),那么用戶就可以對這個字符串鍵執(zhí)行對數(shù)字值的命令。 # 10086 可以被解釋為整數(shù);3.14可以被解釋為浮點數(shù);+123可以被解釋 為整數(shù);1234....(很多) 值太大,沒辦法使用64位整數(shù)來儲存;2.0e7這樣 的科學(xué)計數(shù)法無法被Redis解釋;123ABC包含文字,不可以被解釋; -- 增加或者減少數(shù)字的值(整數(shù)) # 對于一個保存著數(shù)字的字符串鍵key,我們可以使用incrby,decrby命令 來增加或者減少它的值 incrby key increment 將key儲存的值加上增量,返回key的值 decrby key increment 將key儲存的值減去減量,返回key的值 # 如果執(zhí)行過程中key不存在,name命令會線將鍵key初始化為0, 然后再執(zhí)行增加或者減少操作 -- 增一和減一(整數(shù)) incr key 等同于incrby key 1 decr key 等同于decrby key 1 # 因為針對數(shù)字值得增一和減一操作非常常見,所以Redis特別創(chuàng)建了這 兩個值得命令 (計數(shù)器API的實現(xiàn)) counter.py文件:Counter(name, redis_client), Counter.incr(), Counter.get() , Count.reset (id生成器API的實現(xiàn)) id_generator.py文件:IdGenerator(name, redis_client), IdGenerator.gen() IdGenerator.int() -- 浮點數(shù)的自增和自減 # 為字符串鍵key儲存的值加上浮點數(shù)增量increment,返回key值 附:沒有響應(yīng)的decrbyfloat,但可以通過給定負(fù)值來達(dá)到decrbyfloat 的效果。 redis>set num 10 redis>incrbyfloat num 3.14 redis>incrbyfloat num -2.04 注意事項:即使字符串鍵儲存的是數(shù)字值,它也可以執(zhí)行append、strlen、 setrange的命令,Redis會先將數(shù)字值轉(zhuǎn)換成字符串,然后再執(zhí)行命令 | 二進(jìn)制數(shù)據(jù)操作 -- 設(shè)置和獲取二進(jìn)制數(shù)據(jù) # set,get,setnx,append等命令設(shè)置二進(jìn)制數(shù)據(jù) # 因為Redis自帶的客戶端redis_cli沒辦法方便的設(shè)置二進(jìn)制數(shù)據(jù) # 所以這里使用Python客戶端來進(jìn)行 >> import redis >> r = redis.Redis() >>r.set('bits', 0b10010100) # 將字符串鍵bits的值設(shè)置為二進(jìn)制10010100 >>True >> bin(int(r.get('bits'))) # 獲取字符串鍵bits儲存的二進(jìn)制值(需要進(jìn)行轉(zhuǎn)換) >>'0b10010100' >> r.append('bits', 0b111) # 將0b111(也即是十進(jìn)制的7)推入到bits已有 二進(jìn)制位的末尾 >>4 >> bin(int(r.get('bits'))) # 推入之前的值為0b10010100 =148 '0b10111001111' # 推入之后的值為0b1011100111 = 1487 -- 二進(jìn)制位的索引 # 和儲存文字時的索引不同,當(dāng)字符串鍵儲存的是二進(jìn)制位時,二進(jìn)制的索引 會從左到右依次遞減。 -- 設(shè)置二進(jìn)制位的值 setbit key index value # 將給定索引上的二進(jìn)制位的值設(shè)置為value, 命令返回被設(shè)置的位原來儲存的舊值 redis> setbit bits 2 1 (integer) 0 -- 獲取二進(jìn)制位的值 getbit key index # 返回給定索引上的二進(jìn)制位的值 -- 計算值為1的二進(jìn)制位的數(shù)量 bitcount key [start][end] # 計算并返回字符串鍵儲存的值中,被設(shè)置為1的二進(jìn)制位的數(shù)量 start和end參數(shù)的設(shè)置,來限制一個范圍,可以使用負(fù)數(shù)值。 -- 二進(jìn)制位的運算 bitop operation destkey key [key ...] # 對一個或多個保存二進(jìn)制位的字符串鍵執(zhí)行位元操作 ,并將結(jié)果保存到destkey上。 operation可以是AND,OR,NOT,XOR ADN: 對一個或多個key求邏輯并 OR: 對一個或者多個key求邏輯或 XOR: 對一個或多個key求邏輯異或 # 邏輯運算法則:a^b=(a' and b) or (a and b') NOT: 對給定key求邏輯非 # 命令的返回值為計算結(jié)果的字節(jié)長度 b:01001101 b2:10110101 redis> bitop and b1-and-b2 # 00000101 (integer) 1 redis> bitop or b1-or-b2 b2 # 11111101 (integer) 1 redis> bitop xor b1-xor-b2 b1 b2 # 11111000 (intefer) 1 redis> bitop not noy-b1 b1 # 10110010 (integer) 1 # 實現(xiàn)在線人數(shù)統(tǒng)計 online_count.py # 使用Redis緩存熱門圖片 cache= Cache(redis_client) # 設(shè)置緩存的客戶端 file = open('reids-logo.jpg', 'r') # 打開文件 data = file.read() # 讀取文件數(shù)據(jù) file.close() # 關(guān)閉文件 cache.put('redis-logo', data) # 以redis-logo為名字,將圖片緩存起來 cache.get('redis-logo') # 取出redis-logo圖片的數(shù)據(jù) | 儲存中文時的注意事項 -- strlen,setrange,getrange不適用于中文 # 一個英文字符只需要使用單個字節(jié)來儲存,而一個中文 字符卻需要使用多個字節(jié)來儲存。 # strlen,setrange,getrange都是為英文設(shè)置的,它們只會 在字符為單個字節(jié)的情況下正常工作,而一旦我們儲存的 是類似中文這樣多字節(jié)字符,那這三個命令就不再適用了。 -- strlen示例 $ redis-cli --raw # 在redis-cli中使用中文時,必須打開--raw 選項,才能正常顯示中文 redis> set msq '世界你好' OK redis> get msg redis> strlen msg # 這里strlen顯示了'世界你好'的字節(jié)長度為12字節(jié) 12 # 但我們真正想知道的是msg鍵里面包含多少個字符 --setrange和getrange示例 setrange和getrange的情況也是類似的:因為這兩個命令所使用的索引 是根據(jù)字節(jié)而不是字符來編排的,所以調(diào)用setrange或者getrange來 處理中文,得不到我們想要的結(jié)果。 --結(jié)論 # 不要使用strlen、setrange和getrange來處理中文。 # 例外情況:如果你想知道被儲存的中文包含多少個字節(jié),那么可以使用 strlen。
網(wǎng)頁名稱:Redis數(shù)據(jù)操作--字符串
網(wǎng)頁網(wǎng)址:http://muchs.cn/article6/pdjcig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計公司、小程序開發(fā)、網(wǎng)站排名、面包屑導(dǎo)航、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)