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

確認(rèn)一個 key 是否存在

127.0.0.1:6379> exists email

(integer) 1

3 del

刪除一個 key

127.0.0.1:6379> del email

(integer) 1

4 expire

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

127.0.0.1:6379> expire name 10

(integer) 1

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

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

將當(dāng)前數(shù)據(jù)庫中的 key 轉(zhuǎn)移到其它數(shù)據(jù)庫中

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設(shè)置生存時間。不同在于expireat命令接受的時間參數(shù)是 UNIX 時間戳。

12 migrate

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

將key原子性地從當(dāng)前實例傳送到目標(biāo)實例的指定數(shù)據(jù)庫上,一旦傳送成功,key保證會出現(xiàn)在目標(biāo)實例上,而當(dāng)前實例上的key會被刪除。

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

兩個客戶端 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

?允許從內(nèi)部察看給定key的 Redis 對象。

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

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

object 命令有多個子命令:

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

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

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

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

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

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

集合可以被編碼為intset或者h(yuǎn)ashtable。intset是只儲存數(shù)字的小集合的特殊表示。

哈希表可以編碼為zipmap或者h(yuǎn)ashtable。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命令的作用類似,但是它以毫秒為單位設(shè)置key的生存時間,而不像expire命令那樣,以秒為單位。相應(yīng)的用PTTL命令查看其過期時間。

15 pexpireat

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

16 renamenx

當(dāng)且僅當(dāng)newkey不存在時,將key改名為newkey。

當(dāng)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關(guān)聯(lián)。如果鍵key已經(jīng)存在, 并且給定了REPLACE選項, 那么使用反序列化得出的值來代替鍵key原有的值; 相反地, 如果鍵key已經(jīng)存在, 但是沒有給定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中經(jīng)過排序的元素。排序默認(rèn)以數(shù)字作為對象,值被解釋為雙精度浮點數(shù),然后進(jìn)行比較。

一般 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修飾符對字符串進(jìn)行排序

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 修飾符限制返回結(jié)果

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

offset指定要跳過的元素數(shù)量。

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 進(jìn)行排序

? ? by 選項[根據(jù)field2來排序field1】

? ? ? ? ? ?sort field1 by field2

? ? get 選項[根據(jù)field1排序再取出相應(yīng)的field2]

? ? ? ? ? ?使用GET選項, 可以根據(jù)排序的結(jié)果來取出相應(yīng)的鍵值。

? ? ? ? ? ?sort field1? get field2

? ? 組合使用 by 和 get[根據(jù)field2排序field1再取出相應(yīng)的field3】

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

? ? ?獲取多個外部鍵

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

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

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

? ? ?獲取外部鍵,但不進(jìn)行排序

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

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

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

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

? ? ? 將哈希表作為 GET 或 BY 的參數(shù)

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

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

? 保存排序結(jié)果

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

? ? ? ? ? ?sort field store key[結(jié)果保存在key中]

19 scan

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

scan命令用于迭代當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)庫鍵。

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

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

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

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

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

因為scan、sscan、hscanzscan四個命令的工作方式都非常相似, 所以這個文檔會一并介紹這四個命令, 但是要記?。?/p>

sscanhscanzscan命令的第一個參數(shù)總是一個數(shù)據(jù)庫鍵。

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

SCAN 命令的基本用法

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

當(dāng)scan命令的游標(biāo)參數(shù)被設(shè)置為0時, 服務(wù)器將開始一次新的迭代, 而當(dāng)服務(wù)器向用戶返回值為0的游標(biāo)時, 表示迭代已結(jié)束。

scan 0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容