redis原始碼分析(三)redis命令學習總結—string字串

後開啟撒打發了發表於2017-12-20

一、描述

  • 字串型別是Redis中最為基礎的資料儲存型別,它在Redis中是二進位制安全的,這便意味著該型別可以接受任何格式的資料,如JPEG影象資料或Json物件描述資訊等。
  • 在Redis中字串型別的Value最多可以容納的資料長度是512M

二、redis字串命令介紹

1.set 命令:

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

# 對不存在的鍵進行設定
 
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

2、get命令
Redis Get 命令用於獲取指定 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
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 存在但不是字串型別時,返回一個錯誤。

例項

redis 127.0.0.1:6379> GETSET mynewkey "This is my test key"
(nil)
redis 127.0.0.1:6379> GETSET mynewkey "This is my new value to test getset"
"This is my test key"

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
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 Setbit 命令基本語法如下:

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 Setex 命令基本語法如下:設定成功時返回 OK

redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE
redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
60
redis 127.0.0.1:6379> GET mykey
"redis

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

基本語法:設定成功,返回 1 。 設定失敗,返回 0 。

redis 127.0.0.1:6379> SETNX KEY_NAME VALUE
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 命令 - 用 value 引數覆寫給定 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 儲存的不是字串值時,返回一個錯誤

用法: 返回字串值的長度。 當 key 不存在時,返回 0。

redis 127.0.0.1:6379> STRLEN KEY_NAME

示例:

# 獲取字串的長度
 
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

示例:

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
1) "World"

13、Msetnx

Redis Msetnx 命令 - 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。 基本語法:

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 命令 - 這個命令和 SETEX 命令相似,但它以毫秒為單位設定 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。

用法:Redis Psetex 命令以毫秒為單位設定 key 的生存時間 設定成功的時候返回ok

redis 127.0.0.1:6379> PSETEX key1 EXPIRY_IN_MILLISECONDS value1

示例:

redis 127.0.0.1:6379> PSETEX mykey 1000 "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

示例:

redis> SET page_view 20
OK

redis> INCR page_view
(integer) 21

redis> GET page_view    # 數字值在 Redis 中以字串的形式儲存
"21"

16、Incrby

Redis Incrby 命令 - 將 key 所儲存的值加上給定的增量值(increment)

Redis Incrby 命令將 key 中儲存的數字加上指定的增量值。

如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 INCRBY 命令。

如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。
用法:

redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT

示例:

# 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 所儲存的值加上給定的浮點增量值(increment)

Redis Incrbyfloat 命令為 key 中所儲存的值加上指定的浮點數增量值。

如果 key 不存在,那麼 INCRBYFLOAT 會先將 key 的值設為 0 ,再執行加法操作。

示例:

# 值和增量都不是指數符號

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)有符號數字表示之內。

示例:

# 對存在的數字值 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 所儲存的值減去給定的減量值(decrement)

說明:
Redis Decrby 命令將 key 所儲存的值減去指定的減量值。

如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 DECRBY 操作。

如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。

示例:

# 對已存在的 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 已經存在並且是一個字串, APPEND 命令將 value 追加到 key 原來的值的末尾

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

示例:

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"

相關文章