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"