9 Redis 字符串(String)

Redis 字符串數據類型的相關命令用于管理 redis 字符串值,基本語法如下:

- 語法
redis 127.0.0.1:6379> COMMAND KEY_NAME
- 實例
redis 127.0.0.1:6379> SET runoobkey redis
OK

redis 127.0.0.1:6379> GET runoobkey
"redis"

在以上實例中我們使用了 SET 和 GET 命令,鍵為 runoobkey。

Redis 字符串命令

下表列出了常用的 redis 字符串命令:

  • 1 SET

Redis SET 命令用于設置給定 key 的值。如果 key 已經存儲其他值, SET 就覆寫舊值,且無視類型。

# 語法
redis 127.0.0.1:6379> SET KEY_NAME VALUE


# 返回值
在 Redis 2.6.12 以前版本, SET 命令總是返回 OK 。
從 Redis 2.6.12 版本開始, SET 在設置操作成功完成時,才返回 OK 。

# 實例
首先,我們在 redis 中創建一個 key 并設置值。

# 對不存在的鍵進行設置
redis 127.0.0.1:6379> SET key "value"
OK
redis 127.0.0.1:6379> GET key
"value"


# 對已存在的鍵進行設置
redis 127.0.0.1:6379> SET key "new-value"
OK
redis 127.0.0.1:6379> GET key
"new-value"
  • 2 GET

Redis Get 命令用于獲取指定 key 的值。如果 key 不存在,返回 nil 。如果key 儲存的值不是字符串類型,返回一個錯誤。

# 語法
redis 127.0.0.1:6379> GET KEY_NAME


# 返回值
返回 key 的值,如果 key 不存在時,返回 nil。 如果 key 不是字符串類型,那么返回一個錯誤。

# 實例
# 對不存在的 key 或字符串類型 key 進行 GET
redis> GET db
(nil)
redis> SET db redis
OK
redis> GET db
"redis"


# 對不是字符串類型的 key 進行 GET
redis> DEL db
(integer) 1
redis> LPUSH db redis mongodb mysql
(integer) 3
redis> GET db
(error) ERR Operation against a key holding the wrong kind of value
  • 3 Getrange

Redis Getrange 命令用于獲取存儲在指定 key 中字符串的子字符串。字符串的截取范圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。

# 語法
redis 127.0.0.1:6379> GETRANGE KEY_NAME start end


# 返回值
截取得到的子字符串。

# 實例
首先,設置 mykey 的值并截取字符串。
redis 127.0.0.1:6379> SET mykey "This is my test key"
OK
redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key"
  • 4 Getset

Redis Getset 命令用于設置指定 key 的值,并返回 key 舊的值。

# 語法
redis 127.0.0.1:6379> GETSET KEY_NAME VALUE


# 返回值
返回給定 key 的舊值。 當 key 沒有舊值時,即 key 不存在時,返回 nil 。
當 key 存在但不是字符串類型時,返回一個錯誤。

# 實例
首先,設置 mykey 的值并截取字符串。
127.0.0.1:6379> GETSET mynewkey "This is my test key"
(nil)
127.0.0.1:6379> get mynewkey
"This is my test key"
127.0.0.1:6379> GETSET mynewkey "This is my new value to test getset"
"This is my test key"
127.0.0.1:6379> get mynewkey
"This is my new value to test getset"

  • 5 Getbit

Redis Getbit 命令用于對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。

# 語法
redis 127.0.0.1:6379> GETBIT KEY_NAME OFFSET

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

# 實例
# 對不存在的 key 或者不存在的 offset 進行 GETBIT, 返回 0

redis> EXISTS bit
(integer) 0

redis> GETBIT bit 10086
(integer) 0


# 對已存在的 offset 進行 GETBIT

redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1
  • 6 Mget

Redis Mget 命令返回所有(一個或多個)給定 key 的值。 如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。

# 語法
redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN


# 返回值
一個包含所有給定 key 的值的列表。

# 實例
redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)
  • 7 Setbit

Redis Setbit 命令用于對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。

# 語法
redis 127.0.0.1:6379> Setbit KEY_NAME OFFSET


# 返回值
指定偏移量原來儲存的位。

# 實例
redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1

redis> GETBIT bit 100    # bit 默認被初始化為 0
(integer) 0
  • 8 Setex

Redis Setex 命令為指定的 key 設置值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。

# 語法:
redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT KEY_VALUE


# 返回值
設置成功時返回 OK 。

# 實例
redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
48
redis 127.0.0.1:6379> GET mykey
"redis
  • 9 Setnx

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。

# 語法
redis 127.0.0.1:6379> SETNX KEY_NAME VALUE


# 返回值
設置成功,返回 1 。 設置失敗,返回 0 。

# 實例
redis> EXISTS job                # job 不存在
(integer) 0

redis> SETNX job "programmer"    # job 設置成功
(integer) 1

redis> SETNX job "code-farmer"   # 嘗試覆蓋 job ,失敗
(integer) 0

redis> GET job                   # 沒有被覆蓋
"programmer"
  • 10 Setrange

Redis Setrange 命令用指定的字符串覆蓋給定 key 所儲存的字符串值,覆蓋的位置從偏移量 offset 開始。

# 語法
redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE


# 返回值
被修改后的字符串長度。

# 實例
redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"

  • 11 Strlen

Redis Strlen 命令用于獲取指定 key 所儲存的字符串值的長度。當 key 儲存的不是字符串值時,返回一個錯誤。

# 語法
redis 127.0.0.1:6379> STRLEN KEY_NAME


# 返回值
字符串值的長度。 當 key 不存在時,返回 0。

# 實例
# 獲取字符串的長度

redis> SET mykey "Hello world"
OK

redis> STRLEN mykey
(integer) 11


# 不存在的 key 長度為 0

redis> STRLEN nonexisting
(integer) 0
  • 12 Mset

Redis Mset 命令用于同時設置一個或多個 key-value 對。

# 語法
redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN 


# 返回值
總是返回 OK 。

# 實例
redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
"World"

  • 13 Msetnx

Redis Msetnx 命令用于所有給定 key 都不存在時,同時設置一個或多個 key-value 對。

# 語法
redis 127.0.0.1:6379> MSETNX key1 value1 key2 value2 .. keyN valueN 


# 返回值
當所有 key 都成功設置,返回 1 。 如果所有給定 key 都設置失敗(至少有一個 key 已經存在),那么返回 0 。

# 實例
# 對不存在的 key 進行 MSETNX

redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1

redis> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"


# MSET 的給定 key 當中有已存在的 key

redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 鍵已經存在,操作失敗
(integer) 0

redis> EXISTS language                          # 因為 MSET 是原子性操作,language 沒有被設置
(integer) 0

redis> GET rmdbs                                # rmdbs 也沒有被修改
"MySQL"
  • 14 Psetex

Redis Psetex 命令以毫秒為單位設置 key 的生存時間。

# 語法
redis 127.0.0.1:6379> PSETEX key1 EXPIRY_IN_MILLISECONDS value1 


# 返回值
設置成功時返回 OK 。

# 實例
redis 127.0.0.1:6379> PSETEX mykey 10000 "Hello"
OK
redis 127.0.0.1:6379> PTTL mykey
999
redis 127.0.0.1:6379> GET mykey
1) "Hello"

  • 6 Mget

Redis Mget 命令返回所有(一個或多個)給定 key 的值。 如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。

# 語法
redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN


# 返回值
一個包含所有給定 key 的值的列表。

# 實例
redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)
  • 7 Setbit

Redis Setbit 命令用于對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。

# 語法
redis 127.0.0.1:6379> Setbit KEY_NAME OFFSET


# 返回值
指定偏移量原來儲存的位。

# 實例
redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1

redis> GETBIT bit 100    # bit 默認被初始化為 0
(integer) 0
  • 8 Setex

Redis Setex 命令為指定的 key 設置值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。

# 語法:
redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT KEY_VALUE


# 返回值
設置成功時返回 OK 。

# 實例
redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
48
redis 127.0.0.1:6379> GET mykey
"redis
  • 9 Setnx

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。

# 語法
redis 127.0.0.1:6379> SETNX KEY_NAME VALUE


# 返回值
設置成功,返回 1 。 設置失敗,返回 0 。

# 實例
redis> EXISTS job                # job 不存在
(integer) 0

redis> SETNX job "programmer"    # job 設置成功
(integer) 1

redis> SETNX job "code-farmer"   # 嘗試覆蓋 job ,失敗
(integer) 0

redis> GET job                   # 沒有被覆蓋
"programmer"
  • 10 Setrange

Redis Setrange 命令用指定的字符串覆蓋給定 key 所儲存的字符串值,覆蓋的位置從偏移量 offset 開始。

# 語法
redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE


# 返回值
被修改后的字符串長度。

# 實例
redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"

  • 11 Strlen

Redis Strlen 命令用于獲取指定 key 所儲存的字符串值的長度。當 key 儲存的不是字符串值時,返回一個錯誤。

# 語法
redis 127.0.0.1:6379> STRLEN KEY_NAME


# 返回值
字符串值的長度。 當 key 不存在時,返回 0。

# 實例
# 獲取字符串的長度

redis> SET mykey "Hello world"
OK

redis> STRLEN mykey
(integer) 11


# 不存在的 key 長度為 0

redis> STRLEN nonexisting
(integer) 0
  • 12 Mset

Redis Mset 命令用于同時設置一個或多個 key-value 對。

# 語法
redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN 


# 返回值
總是返回 OK 。

# 實例
redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
"World"

  • 13 Msetnx

Redis Msetnx 命令用于所有給定 key 都不存在時,同時設置一個或多個 key-value 對。

# 語法
redis 127.0.0.1:6379> MSETNX key1 value1 key2 value2 .. keyN valueN 


# 返回值
當所有 key 都成功設置,返回 1 。 如果所有給定 key 都設置失敗(至少有一個 key 已經存在),那么返回 0 。

# 實例
# 對不存在的 key 進行 MSETNX

redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1

redis> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"


# MSET 的給定 key 當中有已存在的 key

redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 鍵已經存在,操作失敗
(integer) 0

redis> EXISTS language                          # 因為 MSET 是原子性操作,language 沒有被設置
(integer) 0

redis> GET rmdbs                                # rmdbs 也沒有被修改
"MySQL"
  • 14 Psetex

Redis Psetex 命令以毫秒為單位設置 key 的生存時間。

# 語法
redis 127.0.0.1:6379> PSETEX key1 EXPIRY_IN_MILLISECONDS value1 


# 返回值
設置成功時返回 OK 。

# 實例
redis 127.0.0.1:6379> PSETEX mykey 10000 "Hello"
OK
redis 127.0.0.1:6379> PTTL mykey
999
redis 127.0.0.1:6379> GET mykey
1) "Hello"

  • 15 Incr

Redis Incr 命令將 key 中儲存的數字值增一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。

# 語法
redis 127.0.0.1:6379> INCR KEY_NAME 

# 返回值
執行 INCR 命令之后 key 的值。

# 實例
redis> SET page_view 20
OK

redis> INCR page_view
(integer) 21

redis> GET page_view    # 數字值在 Redis 中以字符串的形式保存
"21"
  • 16 Incrby

Redis Incrby 命令將 key 中儲存的數字加上指定的增量值。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCRBY 命令。
如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。

# 語法

redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT

# 返回值
加上指定的增量值之后, key 的值。

# 實例
# key 存在且是數字值

redis> SET rank 50
OK

redis> INCRBY rank 20
(integer) 70

redis> GET rank
"70"


# key 不存在時
redis> EXISTS counter
(integer) 0

redis> INCRBY counter 30
(integer) 30

redis> GET counter
"30"


# key 不是數字值時
redis> SET book "long long ago..."
OK

redis> INCRBY book 200
(error) ERR value is not an integer or out of range
  • 17 Incrbyfloat

Redis Incrbyfloat 命令為 key 中所儲存的值加上指定的浮點數增量值。
如果 key 不存在,那么 INCRBYFLOAT 會先將 key 的值設為 0 ,再執行加法操作。

# 語法
redis 127.0.0.1:6379> INCRBYFLOAT KEY_NAME INCR_AMOUNT

# 返回值
執行命令之后 key 的值。

# 實例
# 值和增量都不是指數符號
redis> SET mykey 10.50
OK

redis> INCRBYFLOAT mykey 0.1
"10.6"


# 值和增量都是指數符號

redis> SET mykey 314e-2
OK

redis> GET mykey                # 用 SET 設置的值可以是指數符號
"314e-2"

redis> INCRBYFLOAT mykey 0      # 但執行 INCRBYFLOAT 之后格式會被改成非指數符號
"3.14"


# 可以對整數類型執行

redis> SET mykey 3
OK

redis> INCRBYFLOAT mykey 1.1
"4.1"


# 后跟的 0 會被移除

redis> SET mykey 3.0
OK

redis> GET mykey                                    # SET 設置的值小數部分可以是 0
"3.0"

redis> INCRBYFLOAT mykey 1.000000000000000000000    # 但 INCRBYFLOAT 會將無用的 0 忽略掉,有需要的話,將浮點變為整數
"4"

redis> GET mykey
"4"
  • 18 Decr

Redis Decr 命令將 key 中儲存的數字值減一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECR 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。

# 語法
redis 127.0.0.1:6379> DECR KEY_NAME 

# 返回值
執行命令之后 key 的值。

# 實例
# 對存在的數字值 key 進行 DECR

redis> SET failure_times 10
OK

redis> DECR failure_times
(integer) 9


# 對不存在的 key 值進行 DECR

redis> EXISTS count
(integer) 0

redis> DECR count
(integer) -1


# 對存在但不是數值的 key 進行 DECR

redis> SET company YOUR_CODE_SUCKS.LLC
OK

redis> DECR company
(error) ERR value is not an integer or out of range 
  • 19 Decrby

Redis Decrby 命令將 key 所儲存的值減去指定的減量值。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECRBY 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。

# 語法
redis 127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT

# 返回值
減去指定減量值之后, key 的值。

# 實例
# 對已存在的 key 進行 DECRBY

redis> SET count 100
OK

redis> DECRBY count 20
(integer) 80


# 對不存在的 key 進行DECRBY

redis> EXISTS pages
(integer) 0

redis> DECRBY pages 10
(integer) -10
  • 20 Append

Redis Append 命令用于為指定的 key 追加值。
如果 key 已經存在并且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。
如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。

# 語法
redis 127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE

# 返回值
追加指定值之后, key 中字符串的長度。

# 實例
# 對不存在的 key 執行 APPEND

redis> EXISTS myphone               # 確保 myphone 不存在
(integer) 0

redis> APPEND myphone "nokia"       # 對不存在的 key 進行 APPEND ,等同于 SET myphone "nokia"
(integer) 5                         # 字符長度


# 對已存在的字符串進行 APPEND

redis> APPEND myphone " - 1110"     # 長度從 5 個字符增加到 12 個字符
(integer) 12

redis> GET myphone
"nokia - 1110"

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容