Redis基礎知識(學習筆記8--Redis命令(1))

东山絮柳仔發表於2024-06-25

一 基本命令

1.1.Redis 資料庫間的切換

>select DB的標號(即index 預設的是0-15

1.2.查詢資料庫中有多少個key

>dbsize

1.3.刪除當前庫中的資料

>flushdb

將當前庫裡面的資料刪除

1.4.刪除所有例項上的資料

>flushall

1.5.退出

>quit

>exit

注意:下面的這個shutdow是關閉Redis服務。

>shutdown

二 Key 操作命令

2.1 keys

>keys pattern

查詢所有符合給定模式pattern的key,pattern為正規表示式。

說明:keys的速度非常快,但在一個大的資料庫中使用它,可能會阻塞當前伺服器的服務。所以,生產環境中一般不推薦使用該命令,而推薦使用scan命令替代。

2.2 exists

>exists key

檢查給定key是否存在。

說明:若key存在,返回1;否則返回0.

2.3 del

>del key [key...]

刪除給定的一個或多個key。不存在的key會被忽略。

說明:返回被刪除key的數量。

2.4 rename

>rename key newkey

將key改名為newkey

說明:當key和newkey相同,或者key不存在時,返回一個錯誤。當newkey已經存在時,rename 命令將覆蓋舊值,改名成功時提示OK,失敗時返回一個錯誤。

2.5 move

> move key db

將當前資料庫的key移動到給定的資料庫db中。

說明:如果當前資料庫(源資料庫)和給定的資料庫(目標資料庫)有相同名字的給定key,或者key不不存在於當前資料庫,那麼,move沒有任何效果。移動成功返回1,失敗返回0.

2.6 type

>type key

返回key所儲存的值的型別。

說明:返回值有以下6種。(1)none (表示key不存在);(2)string(字串);(3)list(列表);(4)set(集合);(5)zset(有序集合);(6)hash(雜湊表)。

2.7 expire 與 pexpire

>expire key seconds 

為給定key設定生存時間。當key過期時(生存時間為 0),它會被自動刪除。expire的時間單位為秒,pexpire的時間單位為毫秒。在Redis種,帶有生存時間的key被稱為”易失的“(volatile)。

說明:生存時間設定成功返回1。若key不存在時,返回0。rename操作不會改變key的生存時間。

2.8 ttl 與 pttl

>ttl key

TTL(time to live),返回指定key的剩餘生存時間。

說明:其返回值存在三種可能:(1)當key不存在時,返回 -2;(2)當key存在,但沒有設定剩餘生存時間時,返回 -1;(3)否則,返回key的剩餘生存時間。ttl命令返回的時間單位為秒,而pttl命令返回的時間單位為毫秒。

2.10 persist

>persist key

去除給定key的生存時間,將這個key從”易失的“轉換成”持久的“。

說明:當生存時間移除成功時,返回1;若key不存在或key沒有設定生存時間,則返回0。

2.11 randomkey

>RANDOMKEY

從當前資料庫種隨機返回(不刪除)一個key。

說明:當前資料庫不為空時,隨機返回一個 key(不刪除) 。 當資料庫為空時,返回 nil(windows 系統返回 null)。此命令一般用來判斷資料庫是否是空的。

2.12 scan

>SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

用於迭代資料庫種的資料庫庫鍵,其引數意義:

  • cursor - 本次迭代開始的遊標(可以簡單的理解為從哪兒開始);
  • pattern - 本次迭代要匹配的key的模式(注意是從篩選出的count個元素種進行的匹配);
  • count - 可選,用於指定本次迭代返回的 key 的數量,預設值為 10 ;
  • type--可選,本次迭代要返回的value的型別,預設為所有型別【是從前面篩選出來的元素種進行的刷選】。

SCAN 命令是一個基於遊標cursor的迭代器:scan命令每次被呼叫之後, 都會向使用者返回一個包含兩個元素的陣列, 第一個元素是用於進行下一次迭代的新遊標, 而第二個元素則是一個陣列, 這個陣列中包含了所有被迭代的元素。使用者在下次迭代時需要使用這個新遊標作為scan命令的遊標引數,以此來延續之前的迭代過程。當scan命令的遊標引數被設定為0時,伺服器將開始一次新的迭代。如果新遊標返回0,表示迭代已結束。

說明:使用間斷的、負數、超出範圍或者其他非正常的遊標來執行增量式迭代不會造成服務崩潰。

當資料量很大時,count的資料量的指定可能不起作用,Redis會自動調整每次的遍歷數目。由於scan命令每次執行都只會返回少量元素,所以,該命令可以用於生產環境,而不會出現keys命令帶來的服務阻塞問題。

增量式迭代命令所使用的演算法只保證在資料集的大小有界的情況下迭代才會停止,換句話說,如果被迭代資料集的大小不斷地增長的話,增量式迭代命令可能永遠也無法完成一次完整迭代,即當一個資料集不斷地變大時,想要訪問這個資料集種的所有元素就需要做更多的工作,能否結束一個迭代取決於使用者執行迭代的速度是否比資料增長的速度更快。

相關命令:另外還有3個scan命令用於對三種型別的value進行遍歷:

* hscan:屬於HASH型value操作命令集合,用於遍歷當前db中指定hash表的所有field-value對。

* sscan:屬於Set型value操作命令集合,用於遍歷當前db中指定set集合的所有元素。

* zscan:屬於ZSet型value操作命令集合,用於遍歷當前db中指定指定集合的所有元素(數值與元素值)。

三. String型別Value 相關命令

String型別的value中可以存放任意資料,包括數值型,甚至是二進位制的圖片、音訊、影片、序列化物件等。一個String型別的Value最大是512M大小。

3.1 set

>set key value [ex seconds | px milliseconds][nx|xx]

set 除了可以直接將key的值設定為value外,還可以指定一些引數:

* ex seconds:為當前key設定過期時間,單位為秒。等價於SETEX命令。

* px milliseconds:為當前key設定過期時間,單位為毫秒。等價於PSETEX命令。

* nx:指定key不存在才會設定成功,用於新增指定的key。等價於SETNX命令。

* xx:指定key必須存在才會設定成功,用於更新指定key的value。

說明:如果value字串中帶有空格,則該字串需要使用雙引號或者單引號引起來,否則會認為set命令的引數數量不準確而報錯。

3.2 setex 和 psetex

>setex/psetex key seconds value

set expire,其不僅為key指定了value,還為其設定了生存時間。

說明:如果key已經存在,則覆蓋舊值。該命令類似於以下兩個命令(set key value;expire key seconds),不同之處是,setex是一個原子性操作,關聯值和設定生存時間兩個動作會在同一個時間內完成,該命令在Redis用作快取時,非常實用。

3.3 setnx

>setnx key value

SET if Not eXists,將key的值設定為value,當且僅當key不不存在。若給定的key已經存在,在SETNX不做任何動作。成功,返回1;否則,返回0。

說明:該命令等價於set key value nx。

3.4 getset

>getset key value

將給定key的值設定為value,並返回key的舊值。

說明:當key存在但不是字元型別時,返回一個錯誤;當key不不存在時,返回nil。

3.5 mset 與 msetnx

>mset/msetnx key value [key value...]

同時設定一個或多個key-value對。

說明:如果某個給定key已經存在,那麼MSET 會用新值覆蓋原來的舊值,如果這不是你所希望的效果,可以考慮使用MSETNX命令:它只會在所有給定key都不存在的情況下進行設定操作。MSET/MSETNX是一個原子性(atomic)操作,所有給定key都會在同一時間內被設定,某些給定key被更新而另一些給定key沒有改變的情況不可能發生。該命令永不失敗。

3.6 mget

>mget key [key...]

返回所有(一個或多個)給定key的值。

說明:如果給定的key裡面,有某個key不存在,那麼這個key返回特殊值nil,其他key正常返回。因此,該命令永不失敗。

3.7 append

>append key value

如果key已經存在並且是一個字串,append命令將value追加到key原來值的末尾。如果key不存在,append就簡單地將給定key設為value,就像執行set key value 一樣。

說明:追加value之後,返回值為 key的字串長度。

3.8 incr 與 decr

>incr key 或 decr key

increment:自動遞增,將key中儲存的數字值+1;

decrement:自動遞減,將key中儲存的數字值-1。

說明:如果key不存在,那麼key的值會先被初始化為0,然後再執行+1或者-1的操作。如果值不能表示為數字,那麼返回一個錯誤提示。如果執行正確,則返回+1或者-1後的值。

3.9 incrby 與 decrby

>incrby key increment 或者 decrby key decrement

將key中儲存的數字值增加/減少指定的數值,這個數值只能是整數,可以是負數,但不能是小數。

說明:如果key不存在,那麼key的值會先被初始化為0,然後再執行增加/減少的操作。如果值不能表示為數字,那麼返回一個錯誤提示。如果執行正確,則返回增加/減少後的值。

3.10 incrbyfloat

>incrbyfloat key increment

為key中所儲存的值加上浮點數增量increment

說明:與之前說明的相同。沒有decrbyfloat命令,但increment為負數可以實現減操作效果。

3.11 strlen

>strlen key

返回key所儲存的字串值的長度。

3.12 getrange

>getrangge key start end

返回key中字串值的子字串。字串的擷取範圍由start和end兩個偏移量決定,包括start 和 end在內。

說明:end必須要比start大。支援負數偏移量,表示從字串最後開始計數,-1 表示最後一個字元,-2 表示倒數第二個,以此類推。

3.13 setrange

>setrange key offset value

用value引數替換給定key所儲存的字串,從偏移量offset開始。

說明:當offset值大於str長度時,中間使用零位元組\x00填充,即0000 0000位元組填充;對於不存在的key當作空串處理。

3.14 位操作命令

名稱中包含bit的命令,都是對二進位制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield。這些命令不常用。

3.15 典型應用場景

(1)資料快取

(2)計數器

(3)共享Session

對於一個分散式應用系統,如果將類似使用者登入資訊這樣的Session資料儲存在提供登入服務的伺服器中,那麼如果使用者再次提交像收藏、支付等請求時可能會出現問題:在提供收藏、支付等服務的伺服器中並沒有該使用者的Session資料,從而導致該使用者需要重新登入。對於使用者來說,使用者體驗很差。

此時,可以將系統中所有使用者的session資料全部儲存到到Redis中,使用者在提交新的請求(像收藏、支付)後,系統先從Redis中查詢相應的Session資料,如果存在,則再進行相應的操作,否則跳轉到登入頁面。這樣就不會引發”重新登入“問題。

(4)限速器

現在很多平臺為了防止DoS(Denial of Serive,拒絕服務)攻擊,一般都會限制一個IP不能在一秒內訪問超過n次。而Redis可以結合Key的過期時間與incr命令來完成限速功能,充當限速器。

注意:其無法防止DDoS(Distibuted Denial of Serive,分散式拒絕服務)的攻擊。

學習參閱宣告

【Redis影片從入門到高階】

https://www.bilibili.com/video/BV1U24y1y7jF?p=11&vd_source=0e347fbc6c2b049143afaa5a15abfc1c】

相關文章