redis筆記03-string結構及命令詳解

【Redis字符串類型的操作】

◆ 字符串類型及其命令

SET 、SETNX、SETEX、PSETEX

SET key value [ex 過期秒數] [px 過期毫秒數] nx xx

EX second :設置鍵的過期時間爲 second 秒。

SET key value EX second 效果等同於 SETEX key second value 。

PX millisecond :設置鍵的過期時間爲 millisecond 毫秒。

SET key value PX millisecond 效果等同於 PSETEX key millisecond value 。

NX :只在鍵不存在時,纔對鍵進行設置操作。

SET key value NX 效果等同於 SETNX key value 。

XX :只在鍵已經存在時,纔對鍵進行設置操作

SETRANGE

SETRANGE key offset value

用 value 參數覆寫(overwrite)給定 key 所儲存的字符串值,從偏移量 offset 開始。不存在的 key 當作空白字符串處理。

如果offset過大,則原字符和偏移量之間的空白將用零字節(zerobytes, "\x00" )來填充。

最大偏移量是 2^29-1(536870911) ,因爲 Redis 字符串的大小被限制在 512 兆(megabytes)以內。

 

MSET、MSETNX

mset k1 v1 k2 v2

1: 一次性設置多對鍵值

2: 原子性

3: 覆蓋舊值

4: 不想覆蓋舊值用 msetnx

msetnx k1 v1 k2 v2

特點:不覆蓋舊值

 

APPEND

APPEND key value

如果 key 已經存在並且是一個字符串,APPEND 命令將 value 追加到 key 原來的值的末尾。

如果 key 不存在, APPEND 就簡單地將給定 key 設爲 value ,就像執行 SET key value 一樣。

返回值:追加 value 之後, key 中字符串的長度。

 

GET

GET key

返回 key 所關聯的字符串值。如果 key 不存在那麼返回特殊值 nil 。

假如 key 儲存的值不是字符串類型,返回一個錯誤,因爲 GET 只能用於處理字符串值。

可用版本:>= 1.0.0 時間複雜度:O(1)

返回值:當 key 不存在時,返回 nil ,否則,返回 key 的值。如果 key 不是字符串類型,那麼返回一個錯誤。

 

MGET

MGET key [key ...]

返回所有(一個或多個)給定 key 的值。如果給定的某個 key 不存在,返回特殊值 nil

 

GETRANGE

GETRANGE key start end

返回字符串的一部分,和PHP中substr一樣 (redis2.0以前該命令就叫substr)

左->右 0 ,1,2..計數;右->左 -1,-2,-3 ..計數

 

GETSET

GETSET key newvalue 設置新值,並返回舊值

GETSET db mongodb #沒有舊值,返回 nil

GET db #返回"mongodb"

GETSET db redis #返回舊值 mongodb

GET db #返回"redis"

 

STRLEN

STRLEN key

返回 key 所儲存的字符串值的長度。

key不存在是返回0;key 存在但不是字符串類型時,返回一個錯誤。

 

DECR、DECRBY、INCR、INCRBY、INCRBYFLOAT

SETBIT

SETBIT key offset value

設置或清除指定偏移量上的位(bit)爲0/1

1:當 key 不存在時,自動生成一個新的字符串值。

2:字符串會進行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。

3:offset 參數必須大於或等於 0 ,小於 2^32 。

4:返回值爲該bit之前的值

用此功能把'a'->'A'

 

GETBIT

GETBIT key offset

對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。當 offset 比字符串值的長度大,或者 key 不存在時,返回 0

(不能判斷確實爲0,還是offset不對) 注意:位從左邊,從0記數

 

BITOP、BITCOUNT

BITOP operation destkey key1 [key2 ...]

對key1,key2..keyN作operation,並將結果保存到 destkey 上。

operation 可以是 AND 、 OR 、 NOT 、 XOR。注:NOT 操作時,key只能有1個

 

1. set key value [ex 秒數]/[px 毫秒數]

如: set a 1 ex 10 , 10秒有效

set a 1 px 9000 , 9秒有效

注: 如果ex,px同時寫,以後面的有效期爲準

如 set a 1 ex 100 px 9000, 實際有效期是9000毫秒

[測試] 設置一個key,有效週期爲10秒

2. set key value [nx]/[xx]

nx (not exist): 表示key不存在時,執行操作

xx: 表示key存在時,執行操作

[測試] 設置一個已經存在的key,後面分別加 nx 和 xx 的結果區別

注意:後面加xx 的時候,必須操作的是一個已經存在的key,否則不會成功。

3. mset [作用]一次性設置多個鍵值

例: mset key1 v1 key2 v2 ....

4. get key [作用]獲取key的值

5. mget key1 key2 ... keyn [作用]獲取多個key的值

6. setrange key offset value [作用] 把字符串的offset偏移字節,改成value

通俗的說,就是把對應的字符串從第offset個字符開始替換成value

[命令] set word hello

setrange word 2 ??

◆ 注意: 如果偏移量>字符長度, 該字符自動補0x00

[命令] setrange word 6 !!

7. append key value [作用] 把value追加到key的原值上

8. getrange key start stop [作用]是獲取字符串中 [start, stop]範圍的值

注意: 對於字符串的下標,左數從0開始,右數從-1開始

[命令]

set title 'chinese'

getrange title 0 3 → "chin"

getrange title 1 -2 → "hines"

注意:

① start>=length(start 所處位置在stop右邊), 則返回空字符串

② stop>=length,則截取至字符結尾

9. getset key newvalue [作用] 獲取並返回舊值,設置新值

[命令]

set status sleep

getset status wakeup → "sleep"

10. incr key [作用] 指定的key的值加1,並返回加1後的值

decr key [作用] 指定的key的值減1,並返回減1後的值

注意:

① 不存在的key當成0,再incr操作

② 範圍爲64有符號

incrby key number [作用] 指定的key的值加number,並返回結果

decrby key number [作用] 指定的key的值減number,並返回結果

incrbyfloat key floatnumber [作用] 指定的key的值加浮點值,並返回結果(注意:沒有decrbyfloat,很奇怪!)

11. setbit key offset value [作用] 設置offset對應二進制位上的值 [返回]該位上的舊值

[理解] 大寫字母和小寫字母之間的ASCII相差32位,因此若要將大寫字母轉化爲小寫,只需要將第2位的原有的0改爲1,看下圖:

[命令] setbit char 2 1

同樣的,要把小寫變成大寫,只需要把第2位的1改成0:

注意:

① 如果offset過大,則會在中間填充0,

② offset最大2^32-1 = 4294967296-1,可推出最大的的字符串爲512M

12. getbit key offset [作用] 獲取值的二進制表示,對應位上的值(從左,從0編號)

其實就是取對應的二進制的某個數值。例如A的二進制爲 0100 0001

13. bitop operation destkey key1 [key2 ...]

對key1,key2..keyN作operation,並將結果保存到 destkey 上。operation 可以是 AND 、 OR 、 NOT 、 XOR。注意: 對於NOT操作, key不能多個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章