Redis學習——常見命令
單執行緒
- 一次只執行一條命令
- 拒絕使用長/慢命令
- 其實並不是單執行緒 有些操作使用獨立執行緒
通用命令
- 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 決定。
字串的擷取範圍由索引引數 start 和 end 決定(範圍涵蓋 start 和 end )。
語法
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"