redis Key命令

1 keys

返回滿足給定 pattern 的所有 key

*代表所有

127.0.0.1:6379> keys *

1) "zet"

2) "set"

3) "appToken"

4) "email"

5) "name"

6) "list"

7) "hash"

127.0.0.1:6379> keys list*

1) "list"

2 exists

確認一個 key 是否存在

127.0.0.1:6379> exists email

(integer) 1

3 del

刪除一個 key

127.0.0.1:6379> del email

(integer) 1

4 expire

設置一個 key 的過期時間(單位:秒)

127.0.0.1:6379> expire name 10

(integer) 1

ttl獲取key有效時間負數說明已過期(取消expire時,ttl也為負)

127.0.0.1:6379> ttl name

(integer) 6

127.0.0.1:6379> ttl name

(integer) 4

127.0.0.1:6379> ttl name

(integer) -2

5 move

將當前數據庫中的 key 轉移到其它數據庫中

127.0.0.1:6379> select 0

OK

127.0.0.1:6379> set name wxc

OK

127.0.0.1:6379> get name

"wxc"

127.0.0.1:6379> move name 1

(integer) 1

127.0.0.1:6379> get name

(nil)

127.0.0.1:6379> select 1

OK

127.0.0.1:6379[1]> get name

"wxc"

6 persist

移除給定 key 的過期時間

127.0.0.1:6379[1]> expire name 20

(integer) 1

127.0.0.1:6379[1]> ttl name

(integer) 15

127.0.0.1:6379[1]> persist name

(integer) 1

127.0.0.1:6379[1]> ttl name

(integer) -1

127.0.0.1:6379[1]> get name

"wxc"

7 randomkey

隨機返回 key 空間的一個 key

127.0.0.1:6379> randomkey

"appToken"

127.0.0.1:6379> randomkey

"hash"

8 rename

127.0.0.1:6379[1]> set name wxc

OK

127.0.0.1:6379[1]> rename name myname

OK

127.0.0.1:6379[1]> keys *

1) "myname"

9 type

127.0.0.1:6379> keys *

1) "zet"

2) "set"

3) "appToken"

4) "list"

5) "hash"

127.0.0.1:6379> type zet

zset

127.0.0.1:6379> type set

set

127.0.0.1:6379> type hash

hash

10 dump

序列化給定key,并返回被序列化的值,使用RESTORE命令可以將這個值反序列化為 Redis 鍵。

127.0.0.1:6379> set email wxc@126.com

OK

127.0.0.1:6379> dump email

"\x00\x0bwxc@126.com\x06\x00\xd7\xf1hU\x0b,\x8cB"

11?expireat

expireat的作用和expire類似,都用于為key設置生存時間。不同在于expireat命令接受的時間參數是 UNIX 時間戳。

12 migrate

MIGRATE host port key destination-db timeout [COPY] [REPLACE]

將key原子性地從當前實例傳送到目標實例的指定數據庫上,一旦傳送成功,key保證會出現在目標實例上,而當前實例上的key會被刪除。

命令的內部實現是這樣的:它在當前實例對給定key執行DUMP命令 ,將它序列化,然后傳送到目標實例,目標實例再使用RESTORE對數據進行反序列化,并將反序列化所得的數據添加到數據庫中;當前實例就像目標實例的客戶端那樣,只要看到RESTORE命令返回OK,它就會調用DEL刪除自己數據庫上的key。當IOERR出現時,有以下兩種可能:key可能存在于兩個實例;key可能只存在于當前實例.唯一不可能發生的情況就是丟失key,因此,如果一個客戶端執行MIGRATE命令,并且不幸遇上。OERR錯誤,那么這個客戶端唯一要做的就是檢查自己數據庫上的key是否已經被正確地刪除。

兩個客戶端 127.0.0.1:6379;127.0.0.1 7777

127.0.0.1:6379> migrate 127.0.0.1 7777 name 0 1000

OK?

13 object

?允許從內部察看給定key的 Redis 對象。

它通常用在除錯(debugging)或者了解為了節省空間而對key使用特殊編碼的情況。

當將Redis用作緩存程序時,你也可以通過object命令中的信息,決定key的驅逐策略(eviction policies)。

object 命令有多個子命令:

object refcount <key>: 返回給定key引用所儲存的值的次數。此命令主要用于除錯。

object encoding <key>:返回給定key所儲存的值所使用的內部表示(representation)。

object idletime <key>:返回給定key自儲存以來的空閑時間(idle, 沒有被讀取也沒有被寫入),以秒為單位。

對象可以以多種方式編碼:

字符串可以被編碼為raw(一般字符串)或int(為了節約內存,Redis 會將字符串表示的 64 位有符號整數編碼為整數來進行儲存)。對于3.0及以上版本,字符串小于39字節編碼格式為embstr,

列表可以被編碼為ziplist或linkedlist。ziplist是為節約大小較小的列表空間而作的特殊表示。

集合可以被編碼為intset或者hashtable。intset是只儲存數字的小集合的特殊表示。

哈希表可以編碼為zipmap或者hashtable。zipmap是小哈希表的特殊表示。

有序集合可以被編碼為ziplist或者skiplist格式。ziplist用于表示小的有序集合,而skiplist則用于表示任何大小的有序集合。

127.0.0.1:6379> set name wxc

OK

127.0.0.1:6379> object refcount name

(integer) 1

127.0.0.1:6379> object idletime name

(integer) 34

127.0.0.1:6379> get name

"wxc"

127.0.0.1:6379> object idletime name

(integer) 2

127.0.0.1:6379> object encoding name

"embstr"

14 pexpire

這個命令和expire命令的作用類似,但是它以毫秒為單位設置key的生存時間,而不像expire命令那樣,以秒為單位。相應的用PTTL命令查看其過期時間。

15 pexpireat

這個命令和expireat命令類似,但它以毫秒為單位設置key的過期 unix 時間戳,而不是像expireat那樣,以秒為單位。

16 renamenx

當且僅當newkey不存在時,將key改名為newkey。

當key不存在時,返回一個錯誤。

127.0.0.1:6379> set name wxc

OK

127.0.0.1:6379> renamenx name myname

(integer) 1

127.0.0.1:6379> set name wxc

OK

127.0.0.1:6379> renamenx name myname

(integer) 0

17 restore

反序列化給定的序列化值,并將它和給定的key關聯。如果鍵key已經存在, 并且給定了REPLACE選項, 那么使用反序列化得出的值來代替鍵key原有的值; 相反地, 如果鍵key已經存在, 但是沒有給定REPLACE選項, 那么命令返回一個錯誤。

127.0.0.1:6379> restore email2 0? "\x00\x0bwxc@126.com\x06\x00\xd7\xf1hU\x0b,\x8cB" ?replace

OK

127.0.0.1:6379> get email2

"wxc@126.com"

18 sort

返回或保存給定列表、集合、有序集合key中經過排序的元素。排序默認以數字作為對象,值被解釋為雙精度浮點數,然后進行比較。

一般 sort 用法

?最簡單的sort使用方法是sort key和sort key DESC:

127.0.0.1:6379> lpush numlist 32 45 3 46

(integer) 4

127.0.0.1:6379> sort numlist

1) "3"

2) "32"

3) "45"

4) "46"

127.0.0.1:6379> sort numlist desc

1) "46"

2) "45"

3) "32"

4) "3"

使用 alpha修飾符對字符串進行排序

127.0.0.1:6379> lpush strlist wxcname

(integer) 1

127.0.0.1:6379> lpush strlist wxchome

(integer) 2

127.0.0.1:6379> lpush strlist wxcemail

(integer) 3

127.0.0.1:6379> sort strlist alpha

1) "wxcemail"

2) "wxchome"

3) "wxcname"

使用 LIMIT 修飾符限制返回結果

排序之后返回元素的數量可以通過LIMIT修飾符進行限制, 修飾符接受offset和count兩個參數:

offset指定要跳過的元素數量。

count指定跳過offset個指定的元素之后,要返回多少個對象。

127.0.0.1:6379> rpush rank 2 4 7 8 4

(integer) 5

127.0.0.1:6379> rpush rank 9 6 1 5 7

(integer) 10

127.0.0.1:6379> sort rank limit 0 5

1) "1"

2) "2"

3) "4"

4) "4"

5) "5"

使用外部 key 進行排序

? ? by 選項[根據field2來排序field1】

? ? ? ? ? ?sort field1 by field2

? ? get 選項[根據field1排序再取出相應的field2]

? ? ? ? ? ?使用GET選項, 可以根據排序的結果來取出相應的鍵值。

? ? ? ? ? ?sort field1? get field2

? ? 組合使用 by 和 get[根據field2排序field1再取出相應的field3】

? ? ? ? ? ?sort field1 by field2 ?get field3

? ? ?獲取多個外部鍵

? ? ? ? ? ?sort field1? get field2 get field3

? ? ? ? ? ?get有一個額外的參數規則,那就是 —— 可以用#獲取被排序鍵的值。

? ? ? ? ? ?sort field1? get # get field2 get field3[打印field1,field2,field3]

? ? ?獲取外部鍵,但不進行排序

? ? ? ? ? ?通過將一個不存在的鍵作為參數傳給by選項, 可以讓sort跳過排序操作, 直接返回結果

? ? ? ? ? ?sort field by not-exists-key[返回結果不會排序]

? ? ? ? ? ?通過將這種用法和get選項配合, 就可以在不排序的情況下, 獲取多個外部鍵, 相當于執行一個整合的獲取操作(類似于 SQL 數據庫的join關鍵字)。

? ? ? ? ? ? sort field1 by not-exists-key?get # get field2 get field3[打印不排序的field1,field2,field3]

? ? ? 將哈希表作為 GET 或 BY 的參數

? ? ? ? ? ? BY和GET選項都可以用key->field的格式來獲取哈希表中的域的值, 其中key表示哈希表鍵, ?而field則表示哈希表的域

? ? ? ? ? ? sort field1 ?by key->field get key->field2 get key->field3

? 保存排序結果

? ? ? ? ? ? ?默認情況下,sort操作只是簡單地返回排序結果,并不進行任何保存操作。通過給store選項指定一個key參數,可以將排序結果保存到給定的鍵上。如果被指定的key已存在,那么原有的值將被排序結果覆蓋。

? ? ? ? ? ?sort field store key[結果保存在key中]

19 scan

scan命令及其相關的sscan命令、hscan命令和zscan命令都用于增量地迭代一集元素:

scan命令用于迭代當前數據庫中的數據庫鍵。

sscan命令用于迭代集合鍵中的元素。

hscan命令用于迭代哈希鍵中的鍵值對。

zscan命令用于迭代有序集合中的元素(包括元素成員和元素分值)。

以上列出的四個命令都支持增量式迭代, 它們每次執行都只會返回少量元素, 所以這些命令可以用于生產環境, 而不會出現像keys命令、smembers命令帶來的問題 —— 當keys命令被用于處理一個大的數據庫時, 又或者smembers命令被用于處理一個大的集合鍵時, 它們可能會阻塞服務器達數秒之久。

不過, 增量式迭代命令也不是沒有缺點的: 舉個例子, 使用smembers命令可以返回集合鍵當前包含的所有元素, 但是對于scan這類增量式迭代命令來說, 因為在對鍵進行增量式迭代的過程中, 鍵可能會被修改, 所以增量式迭代命令只能對被返回的元素提供有限的保證 。

因為scansscanhscanzscan四個命令的工作方式都非常相似, 所以這個文檔會一并介紹這四個命令, 但是要記住:

sscanhscanzscan命令的第一個參數總是一個數據庫鍵。

而scan命令則不需要在第一個參數提供任何數據庫鍵 —— 因為它迭代的是當前數據庫中的所有數據庫鍵。

SCAN 命令的基本用法

scan命令是一個基于游標的迭代器:scan命令每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為scan命令的游標參數, 以此來延續之前的迭代過程。

scan命令的游標參數被設置為0時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為0的游標時, 表示迭代已結束。

scan 0

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容