以下為Redis中有關Keys操作的一些命令,內容主要來源于Redis的官方文檔。如有需要,請參閱Redis的官方文檔:http://redis.io/commands#generic。
1.DEL
語法:DEL key [key
...]
說明:移除指定的keys,如果該key不存在則將會被忽略。該操作的時間復雜度為O(N),這里N為將要移除的keys的個數。當將要移除的key對應除字符串類型外其它類型的值時,對該key進行操作的時間復雜度為O(M),M為列表(list)、集合(set)、有序集合(sorted
set)或者哈希(hash)中所包含元素的個數。移除對應值為字符串類型的單個key的時間復雜度為O(1)。
返回值:將要移除的keys的個數。
該命令自0.07版本后可用。
2.EXISTS
語法:EXISTS
key
說明:判斷指定的key是否存在。該操作的時間復雜度為O(1)。
返回值:如果指定的key存在,則返回值為1,否則返回值為0。
該命令自0.0.7版本后可用。
3.EXPIRE
語法:EXPIRE
key
seconds
說明:設置指定key的超時時間,超時后該key將會被自動刪除。該操作的時間復雜度為O(1)。在Redis中,如果一個key與某個超時時間相關聯,那么該key將被稱為是易失的(volatile)。在2.1.3版本之前,已經存在的超時時間是不能被重寫的。因此,如果一個key已經關聯了某個過期時間,那么該命令將不會起作用并且返回值為0。但是自2.1.3版本后,Redis允許更新一個key的超時時間。另外,你可以使用PERSIST命令來移除一個key相關聯的超時時間。
返回值:如果成功設置了超時時間,那么返回值為1;如果該key不存在或者不能夠設置超時時間,那么返回值為0。
該命令自0.0.9版本后可用。
4.EXPIREAT
語法:EXPIREAT key
timestemp
說明:該操作的時間復雜對為O(1)。該命令與EXPIRE命令有著相同的語義和效果,二者唯一的差別是:EXPIREAT命令中指定的并不是表示TTL(Time
To
Live)的秒數,而是一個確定的UNIX時間戳(即自1970年1月1日之后的秒數)。
返回值:如果成功設置了超時時間,那么返回值為1,如果該key不存在或者不能夠設置超時時間,那么返回值為0。
該命令自1.1版本后可用。
5.KEYS
語法:KEYS
pattern
說明:返回與指定模式相匹配的所用的keys。該操作的時間復雜度為O(N),N為數據庫中所擁有的keys的個數,并假設數據庫中keys的名稱與給定的匹配模式均具有有限的長度。雖然該操作的時間復雜度為O(N),但是此處時間復雜度的常量系數相當低。需要注意的是:在生產環境中使用該命令需要特別注意,該命令在對規模較大的數據庫進行操作時可能會損害性能。該命令主要是設計用來進行調試和進行特殊的操作,例如更改keyspace的布局(layout)等。
該命令所支持的匹配模式如下:
(1)?:用于匹配單個字符。例如,h?llo可以匹配hello、hallo和hxllo等;
(2)*:用于匹配零個或者多個字符。例如,h*llo可以匹配hllo和heeeello等;
(3)[]:可以用來指定模式的選擇區間。例如h[ae]llo可以匹配hello和hallo,但是不能匹配hillo。
同時,可以使用“/”符號來轉義特殊的字符
例如,使用如下命令可以查看數據庫中的所有keys:keys *
返回值:返回匹配指定模式的keys的列表。
該命令自0.0.7版本后可用。
6.MOVE
語法:MOVE key
db
說明:將指定的key從當前選擇的數據庫(使用SELECT命令)移動到目標數據庫,該操作的時間復雜度為O(1)。當該key在目標數據庫中已經存在或者它在源數據庫中并不存在時,該命令將不進行任何操作。基于此可以將該命令用作一個鎖定的原語操作(locking
primitive)。
返回值:如果該key被移至目標數據庫,那么返回值為1;如果該key未被移動,那么返回值為0。
該命令自0.0.7版本后可用。
7.OBJECT
語法:OBJECT
subcommand [arguments [arguments
...]]
說明:對于現階段已經實現的子命令而言,時間復雜度均為O(1)。該命令允許用戶查看與keys相關聯的Redis對象的內部信息。對于調試或者理解keys是否正在使用特殊編碼的數據類型以便節省空間,該命令非常有用。在使用Redis作為緩存時,你的應用程序可能需要使用OBJECT命令返回的信息來實現應用層次的key驅離策略(eviction
policies)。
該命令支持多種子命令,如下所示:
(1)OBJECT REFCOUNT
<key>:返回對與指定key相關聯的值的引用個數。該命令對用戶進行調試非常有幫助;
(2)OBJECT ENCODING
<key>:返回用于存儲與指定key相關聯的值的內部表示類型;
(3)OBJECT IDLETIME
<key>:返回與key相關聯的值自存儲以來處于空閑狀態(IDLE)的秒數(未被read或write等操作所請求)。計時器的時間粒度為10秒,該值在后續版本中可能會發生變化。
對象可以使用如下不同的方式進行編碼:
(1)string可以按照正常的字符串編碼格式進行存儲或者使用int類型(表示64位有符號數區間中整數的字符串可以按照這種方式進行編碼以便節省存儲空間);
(2)lists可以被編碼為ziplist或者linkedlist格式。對于規模較小的鏈表而言,可以使用ziplist來表示以便節省存儲空間;
(3)sets可以被編碼為intset或者hashtable格式。intset作為一種特別的編碼方式可以用于僅有整數構成的規模較小的集合中;
(4)hashes可以被編碼為zipmap或者hashtable。zipmap可以用于對規模較小的hashes進行編碼;
(5)sorted
sets可以編碼為ziplist或者skiplist。對于list類型,規模較小的有序集合(sorted
sets)可以使用ziplist進行編碼,而skiplist可以用于對任何大小的有序集合進行編碼。
需要注意的是:你一旦執行了一種使得Redis無法保持能夠節約存儲空間的編碼方式的操作后,所有特殊編碼的類型將會被自動轉換為普通類型。
返回值:對于不同的子命令將會有不同的返回值。
(1)對于refcount和idletime子命令,返回值為整型(integers)。
(2)對于encoding子命令將會返回一個塊回復(bulk
reply)。
(3)如果你要查看的object已經丟失,那么將會返回一個null塊。
可以通過如下實例進行測試:lpush mylist “hello world”
通過上述測試可以了解到,Redis
2.2.6版本中對對象處于IDLE狀態的時間統計的時間粒度為10秒。
該命令自2.2.3版本后可用。
8.PERSIST
語法:PERSIST
key
說明:移除與key相關聯的超時時間。該操作的時間復雜度為O(1)。
返回值:如果超時時間被移除,那么返回者為1;如果該key不存在或者沒有與之相關聯的超時時間,那么返回值將為0.
該命令自2.1.2版本后可用。
9.RANDOMKEY
語法:RANDOMKEY
說明:從當前選擇的數據庫中返回一個隨機的key。該操作的時間復雜度為O(1)。
返回值:返回隨機key;如果數據庫為空時,那么將返回nil。
該命令的實例如下所示:
該命令自0.0.7版本后可用。
10.RENAME
語法:RENAME key
newkey
說明:將指定的key命名為newkey。該操作的時間復雜度為O(1)。當源和目標的名稱相同或指定的key不存在時,將會返回一個錯誤。如果newkey已經存在時,它將會被重寫。
返回值:返回Redis定義的狀態碼。
該命令自0.0.7版本后可用。
11.RENAMENX
語法:RENAMENX
key
newkey
說明:在newkey不存在的情況下將key命名為newkey。如果源和目標的名稱相同或者指定的key不存在時返回一個錯誤。該操作的時間復雜度為O(1)。
返回值:如果key被命名為newkey,那么返回值為1;如果newkey已經存在,那么返回值為0。
該命令自0.0.7版本后可用。
12.SORT
語法:SORT
key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC]
[ALPHA] [STORE destination]
說明:返回或按key存儲包含在列表(list)、集合(set)或者有序集合(sorted
set)中的元素。該操作的時間復雜度為O(N+M*log(M)),此處N是將要排序的列表(list)或者集合(set)中元素的個數,而M為將要返回的元素個數。在元素未被排序時,復雜度在現階段是O(N)。在下一個發行版本中,其中的拷貝這一步驟將會被避免。
在默認情況下,排序是數字型的,并且元素通過他們的值進行比較,值被解釋為雙精度浮點數。
假設mylist是一組數字的列表,最簡單的SORT命令形式如下所示:
SORT
mylist
假設mylist中存儲有1-10這些值,使用該命令會有如下的輸出結果:
如果你希望使用降序順序來排列元素,可以使用DESC修飾符,如下所示:
SORT mylist
DESC
當mylist中包含字符串并且你希望使用字母順序進行排列時,可以使用ALPHA修飾符,如下所示:
SORT mylist
ALPHA
使用該命令后,會有以下輸出結果:
返回元素的個數可以通過LIMIT修飾符進行限制。使用該修飾符時需要指定起始元素的偏移值和將要返回的元素的總數。如下所示:
SORT mylist
LIMIT 0
5
通過外部keys進行排序
有時候你希望通過使用外部keys作為權值而并非比較列表(list)、集合(set)或者有序集合(sorted
set)中的真實元素來進行排序。例如,假如
列表mylist中包含元素1、2和3,分別表示存儲在object_1、object_2和object_3中對象的唯一ID。當這些對象具有存儲在weight_1、weight_2和weight_3中的相關聯的權值時,SORT可以使用這些權值來排序mylist。如下所示:
SORT
mylist BY
weight_*
BY選項選用了一個模式(本例中為weight_*)來生成用來排序的keys。這些keys的名稱可以通過取代模式中的“*”符號來加以生成,用于取代“*”符號的值是mylist列表中能夠首次匹配模式中的“*”符號的真實值(在本例中為1、2、和3)。
假設在mylist列表中存有值1、2和3,object_1上存儲有值object_1,object_2上存儲有值object_2,object_3上存儲有值object_3,weight_1上存儲有值0.87,weight_2上存儲有值3,weight_3上存儲有值-6.4。如下所示:
使用SORT mylist BY weight_*可以得到如下輸出:
(1)跳過排序元素
可以給BY選項指定一個并不存在的key,這將會使得SORT命令跳過排序操作。這是一種在不進行排序的情況下取得外部keys的有效方式。如下所示:
SORT
mylist BY
nosort
(2)獲取外部keys
在一些情況下,獲取真正的對象而非它們的ID更為有用(object_1、object_2和object_3)。基于列表(list)、集合(set)或有序集合(sorted
set)中的元素獲取外部keys可以通過使用如下命令來完成:
SORT mylist BY weight_* GET object_*
在使用上述命令后,可以得到如下輸出:
GET選項可以被多次使用,從而對原有列表(list)、集合(set)或有序集合(sorted
set)中的每個元素取得更多的keys。同樣,使用特殊的模式#,可以獲取元素本身。如下所示:
SORT mylist BY weight_* GET
object_* GET #
使用上述命令后,可以得到如下輸出:
(3)存儲排序操作的結果
在默認情況下,SORT向客戶端返回排序后的元素。使用STORE選項,可以將結果存儲在一個列表中,用戶可以同時指定與列表相關聯的key。如下所示:
SORT
mylist BY weight_* SRORE
resultkey
(4)在BY和GET選項中使用hashes
你可以對hash字段使用BY和GET選項,語法如下:
SORT mylist
BY weight_*->fieldname GET
object_*->fieldname
字符串“->”用來區分hash字段名稱和key名稱。
返回值:排序元素的列表。
該命令自0.0.7版本后可用。
13.TTL
語法:TTL
key
說明:如果指定的key有與之相關聯的超時時間,那么將會返回該key還能存活的時間。該操作的時間復雜度為O(1)。這一自省能力使得Redis客戶端能夠查看一個指定的key還能夠作為dataset的一部分存在多長時間。
返回值:以秒為單位的TTL(Time
To Live);如果指定的key不存在或者沒有與之相關聯的超時時間,那么便會返回-1。
該命令自0.1000版本后可用。
14.
TYPE
語法: TYPE
key
說明:返回存儲在指定key上的值所具有的數據類型的字符串描述。該操作的時間復雜度為O(1)。數據類型可以是:string、list、set、zset和hash。
返回值:存儲在key上的值的數據類型,如果該key不存在,那么返回值為none。
該命令自0.0.7版本后可用。