1. 程式人生 > >Redis學習——常見命令

Redis學習——常見命令

單執行緒

  1. 一次只執行一條命令
  2. 拒絕使用長/慢命令
  3. 其實並不是單執行緒 有些操作使用獨立執行緒

通用命令

  • keys
  • dbsize
  • exists
  • delete [ ...]
  • expire
  • type

keys *

遍歷所有的 key

kyes [正則表示式]

遍歷所有的 key

keys 命令一般不在生產環境中使用(因為生產環境中鍵值對極多)


dbsize

計算 key 的總數

exists

檢測 key 是否存在(存在則返回1,不存在返回0)


del

刪除指定的鍵值對


expire

key 在 seconds 秒後過期

ttl

查詢 key 的剩餘過期時間(返回 -1 表示沒有過期設定;返回 -2 表示過期刪除)

persist key

去掉 key 的過期設定


type

返回 key 的型別

字串命令

Redis 中的鍵(key)都是字串,但是值可以有多種型別(常見五種)。

字串型別的值(Value)最大不能超過 512M(已經足夠大了)。

一般情況下,考慮到併發、流量等問題,通常字串型別的值最大也只是 百K 級別。

使用場景:

  • 快取
  • 計數器
  • 分散式鎖

主要命令:

  • get
  • set
  • del

get set del

Set 命令

Set 命令用於設定某個鍵值對的值(String),具體是哪個簡直對由引數 key 決定。

如果鍵值對中已有值,Set 就覆寫舊值,且無視舊型別(即,賦完值後為String型)。

語法

set <key> <value>

返回值

在 Redis 2.6.12 以前版本, Set 命令總是返回 OK 。<br>
從 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"

帶引數的 Set 命令

set

無論 key 是否存在,都進行設定

set NX

key 不存在,才設定;等同於 setnx

邏輯上,這是“新增”操作

set XX

key 存在,才設定

邏輯上,這是“更新”操作

Get

Get 命令用於獲取某個鍵值對的值(String),具體是哪個鍵值對由引數 key 決定。

如果鍵值對不存在,則返回 nil 。

如果鍵值對的值部分並非字串型別,則返回一個錯誤。

語法

get <key>

返回值

返回 key 對應的值,如果不存在時,則返回 nil。<br>
如果 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

del

del 命令用於刪除某個鍵值對。

如果 key 代表的鍵值對不存在,則該操作無任何效果。

實際上 del 命令是一個通用命令,各種型別結構都有這個命令。

語法

del <key>

返回值

被刪除的鍵值對的數量。

例項

首先,我們在 redis 中建立一個 key 並設定值 。

redis 127.0.0.1:6379> SET w3ckey redis
OK

現在我們刪除已建立的 key

redis 127.0.0.1:6379> DEL w3ckey
(integer) 1

案例:

  • 計數器:記錄網站每個使用者個人主頁的訪問量
  • 快取:快取視訊的基本資訊(視訊本身在 MySQL 中)
  • 分散式 id 生成

次要命令

  • incr
  • decr
  • incrby
  • decrby

前提要求,value 必須是數值型字串

incr

key 對應的 val 自增 1 。

如果 鍵值對 不存在,那麼會新增該 鍵值對 其值會先被初始化為 0 ,然後再執行 incr 操作

語法

incr <key>

返回值

執行完 Incr 命令之後,鍵值對 的值。

例項

redis> SET page_view 20
OK

redis> INCR page_view
(integer) 21

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

decr 命令

decr 命令將某個 鍵值對數值型字串值 減一。

如果 鍵值對 不存在,那麼會新建該鍵值對,並將其值初始化為 0 ,然後再執行 decr 操作。

語法:

decr <key>

返回值:

新值,即減 1 之後的值

例項:

對存在的數字值 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

incrby

incrby 命令用於將某個 鍵值對 中的 數字型字串值 加上指定的增量值。

如果 鍵值對 不存在,那麼會新建鍵值對,並將其值初始化為 0 ,然後再執行 incrby 命令。

語法:

incrby <key> <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

decrby

decrby 命令用於將某個鍵值對的值減去指定的減量值,具體是哪個鍵值對由引數 key 決定。

要求鍵值對的值必須是數字型字串。

如果鍵值對不存在,那麼將新建鍵值對,將其值初始化為 0 ,然後再執行 Decrby 操作。

如果鍵值對額值不是 String 型別,或不是數字型 String 型別,那麼返回一個錯誤。

語法:

decrby <key> <amount>

返回值:

新值。即,減去指定量之後的值。

例項:

對已存在的 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

其他命令

  • mget
  • mset

mget ...

批量獲得 key 對應的值

原子操作,O(n) 複雜度

mset ...

批量設定鍵值對

它們的使用價值在於能節省網路流量和時間。

  • getset
  • append
  • strlen

getset

為鍵值對設定一個新值,於此同時返回原來的值

append

將 val 追加到鍵值對的值後

strlen

返回字串的長度(注意中文)

  • incrbyfloat
  • getrange
  • setrange

incrbyfloat

鍵值對的值自增,val為浮點型字串

並沒有浮點自減命令,但是可以傳入一個負數實現自檢減功能

getrange

獲得指定範圍區間中的值,包括

setrange

為值的指定區間賦值


4. Strlen

Strlen 命令用於獲取某個鍵值對的值(String)的長度,具體是哪個鍵值對由引數 key 決定。

當鍵值對儲存的不是字串型的值時,返回一個錯誤。

語法

Strlen key

返回值

字串值的長度。

key 對應的值不存在時,返回 0。

例項

獲取字串的長度

redis> SET mykey "Hello world"
OK

redis> STRLEN mykey
(integer) 11

不存在的 key 長度為 0

redis> STRLEN nonexisting
(integer) 0

5. Getset

Getset 命令用於設定某個鍵值對的值(String),並返回該鍵值對的舊值,具體是哪個鍵值對由引數 key 決定 。

語法

Getset key value

返回值

返回所指定的鍵值對的舊值。

當所指定的 key-value 不存在時,返回 nil 。

當所指定的 key-value 的值部分不是字串型別時,返回一個錯誤。

例項

首先,設定 mykey 的值並擷取字串。

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"

6. Getrange

Getrange 命令用於獲取某個鍵值對的值(String)的一個子字串,具體是哪個鍵值對由引數 key 決定。

字串的擷取範圍由索引引數 startend 決定(範圍涵蓋 startend )。

語法

Getrange key 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"

7. Append

Append 命令用於為某個 鍵值對 的值(String)拼接追加新內容,具體是哪個鍵值對由引數 key 決定。

如果 鍵值對 存在並且值為字串, Append 命令將 value 追加原值的末尾。

如果 鍵值對 不存在, Append 就簡單地將等同於 Set key value 。

語法

Append key value

返回值

追加指定值之後, 鍵值對中值的長度。

例項

對不存在的 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

incr "nokia - 1110"

12. Incrbyfloat

Incrbyfloat 命令用於為某個 鍵值對 中所儲存的值加上指定的浮點數增量值,具體是哪個鍵值對由引數 key 決定。

要求鍵值對的值的必須是可以被解析為雙精度浮點值的字串。

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

Redis 內部使用科學計數法儲存浮點數值字串,輸出精度都固定為小數點後17位。

語法

Incrbyfloat key amount

返回值

執行命令之後 鍵值對 的新值。

例項

值和增量都不是指數符號

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.000000000000 # 但 INCRBYFLOAT 會無略掉無意義的 0 ,甚至簡化為整數
"4"

redis> GET mykey
"4"