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命令用于迭代當前數據庫中的數據庫鍵。
zscan命令用于迭代有序集合中的元素(包括元素成員和元素分值)。
以上列出的四個命令都支持增量式迭代, 它們每次執行都只會返回少量元素, 所以這些命令可以用于生產環境, 而不會出現像keys命令、smembers命令帶來的問題 —— 當keys命令被用于處理一個大的數據庫時, 又或者smembers命令被用于處理一個大的集合鍵時, 它們可能會阻塞服務器達數秒之久。
不過, 增量式迭代命令也不是沒有缺點的: 舉個例子, 使用smembers命令可以返回集合鍵當前包含的所有元素, 但是對于scan這類增量式迭代命令來說, 因為在對鍵進行增量式迭代的過程中, 鍵可能會被修改, 所以增量式迭代命令只能對被返回的元素提供有限的保證 。
因為scan、sscan、hscan和zscan四個命令的工作方式都非常相似, 所以這個文檔會一并介紹這四個命令, 但是要記住:
sscan、hscan和zscan命令的第一個參數總是一個數據庫鍵。
而scan命令則不需要在第一個參數提供任何數據庫鍵 —— 因為它迭代的是當前數據庫中的所有數據庫鍵。
SCAN 命令的基本用法
scan命令是一個基于游標的迭代器:scan命令每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為scan命令的游標參數, 以此來延續之前的迭代過程。
當scan命令的游標參數被設置為0時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為0的游標時, 表示迭代已結束。
scan 0