分享java帶來的快樂

          我喜歡java新東西

          Redis命令——Keys相關(guān)

           

          以下為Redis中有關(guān)Keys操作的一些命令,內(nèi)容主要來源于Redis的官方文檔。如有需要,請參閱Redis的官方文檔:http://redis.io/commands#generic

           1.DEL
          語法:DEL key [key
          ...]
          說明:移除指定的keys,如果該key不存在則將會(huì)被忽略。該操作的時(shí)間復(fù)雜度為O(N),這里N為將要移除的keys的個(gè)數(shù)。當(dāng)將要移除的key對應(yīng)除字符串類型外其它類型的值時(shí),對該key進(jìn)行操作的時(shí)間復(fù)雜度為O(M),M為列表(list)、集合(set)、有序集合(sorted
          set)或者哈希(hash)中所包含元素的個(gè)數(shù)。移除對應(yīng)值為字符串類型的單個(gè)key的時(shí)間復(fù)雜度為O(1)。
          返回值:將要移除的keys的個(gè)數(shù)。
          該命令自0.07版本后可用。

          2.EXISTS
          語法:EXISTS
          key
          說明:判斷指定的key是否存在。該操作的時(shí)間復(fù)雜度為O(1)。
          返回值:如果指定的key存在,則返回值為1,否則返回值為0。
          該命令自0.0.7版本后可用。

          3.EXPIRE
          語法:EXPIRE
          key
          seconds
          說明:設(shè)置指定key的超時(shí)時(shí)間,超時(shí)后該key將會(huì)被自動(dòng)刪除。該操作的時(shí)間復(fù)雜度為O(1)。在Redis中,如果一個(gè)key與某個(gè)超時(shí)時(shí)間相關(guān)聯(lián),那么該key將被稱為是易失的(volatile)。在2.1.3版本之前,已經(jīng)存在的超時(shí)時(shí)間是不能被重寫的。因此,如果一個(gè)key已經(jīng)關(guān)聯(lián)了某個(gè)過期時(shí)間,那么該命令將不會(huì)起作用并且返回值為0。但是自2.1.3版本后,Redis允許更新一個(gè)key的超時(shí)時(shí)間。另外,你可以使用PERSIST命令來移除一個(gè)key相關(guān)聯(lián)的超時(shí)時(shí)間。
          返回值:如果成功設(shè)置了超時(shí)時(shí)間,那么返回值為1;如果該key不存在或者不能夠設(shè)置超時(shí)時(shí)間,那么返回值為0。

           

          該命令自0.0.9版本后可用。

          4.EXPIREAT
          語法:EXPIREAT key
          timestemp
          說明:該操作的時(shí)間復(fù)雜對為O(1)。該命令與EXPIRE命令有著相同的語義和效果,二者唯一的差別是:EXPIREAT命令中指定的并不是表示TTL(Time
          To
          Live)的秒數(shù),而是一個(gè)確定的UNIX時(shí)間戳(即自1970年1月1日之后的秒數(shù))。
          返回值:如果成功設(shè)置了超時(shí)時(shí)間,那么返回值為1,如果該key不存在或者不能夠設(shè)置超時(shí)時(shí)間,那么返回值為0。

           

           


          該命令自1.1版本后可用。

          5.KEYS
          語法:KEYS
          pattern
          說明:返回與指定模式相匹配的所用的keys。該操作的時(shí)間復(fù)雜度為O(N),N為數(shù)據(jù)庫中所擁有的keys的個(gè)數(shù),并假設(shè)數(shù)據(jù)庫中keys的名稱與給定的匹配模式均具有有限的長度。雖然該操作的時(shí)間復(fù)雜度為O(N),但是此處時(shí)間復(fù)雜度的常量系數(shù)相當(dāng)?shù)汀P枰⒁獾氖牵涸谏a(chǎn)環(huán)境中使用該命令需要特別注意,該命令在對規(guī)模較大的數(shù)據(jù)庫進(jìn)行操作時(shí)可能會(huì)損害性能。該命令主要是設(shè)計(jì)用來進(jìn)行調(diào)試和進(jìn)行特殊的操作,例如更改keyspace的布局(layout)等。

           

          該命令所支持的匹配模式如下:
          (1)?:用于匹配單個(gè)字符。例如,h?llo可以匹配hello、hallo和hxllo等;
          (2)*:用于匹配零個(gè)或者多個(gè)字符。例如,h*llo可以匹配hllo和heeeello等;
          (3)[]:可以用來指定模式的選擇區(qū)間。例如h[ae]llo可以匹配hello和hallo,但是不能匹配hillo。
          同時(shí),可以使用“/”符號(hào)來轉(zhuǎn)義特殊的字符

           

          例如,使用如下命令可以查看數(shù)據(jù)庫中的所有keys:keys *


           


          返回值:返回匹配指定模式的keys的列表。


          該命令自0.0.7版本后可用。

          6.MOVE
          語法:MOVE key
          db
          說明:將指定的key從當(dāng)前選擇的數(shù)據(jù)庫(使用SELECT命令)移動(dòng)到目標(biāo)數(shù)據(jù)庫,該操作的時(shí)間復(fù)雜度為O(1)。當(dāng)該key在目標(biāo)數(shù)據(jù)庫中已經(jīng)存在或者它在源數(shù)據(jù)庫中并不存在時(shí),該命令將不進(jìn)行任何操作。基于此可以將該命令用作一個(gè)鎖定的原語操作(locking
          primitive)。


          返回值:如果該key被移至目標(biāo)數(shù)據(jù)庫,那么返回值為1;如果該key未被移動(dòng),那么返回值為0。

           

          該命令自0.0.7版本后可用。

          7.OBJECT
          語法:OBJECT
          subcommand [arguments [arguments
          ...]]
          說明:對于現(xiàn)階段已經(jīng)實(shí)現(xiàn)的子命令而言,時(shí)間復(fù)雜度均為O(1)。該命令允許用戶查看與keys相關(guān)聯(lián)的Redis對象的內(nèi)部信息。對于調(diào)試或者理解keys是否正在使用特殊編碼的數(shù)據(jù)類型以便節(jié)省空間,該命令非常有用。在使用Redis作為緩存時(shí),你的應(yīng)用程序可能需要使用OBJECT命令返回的信息來實(shí)現(xiàn)應(yīng)用層次的key驅(qū)離策略(eviction
          policies)。
          該命令支持多種子命令,如下所示:
          (1)OBJECT REFCOUNT
          <key>:返回對與指定key相關(guān)聯(lián)的值的引用個(gè)數(shù)。該命令對用戶進(jìn)行調(diào)試非常有幫助;
          (2)OBJECT ENCODING
          <key>:返回用于存儲(chǔ)與指定key相關(guān)聯(lián)的值的內(nèi)部表示類型;
          (3)OBJECT IDLETIME
          <key>:返回與key相關(guān)聯(lián)的值自存儲(chǔ)以來處于空閑狀態(tài)(IDLE)的秒數(shù)(未被read或write等操作所請求)。計(jì)時(shí)器的時(shí)間粒度為10秒,該值在后續(xù)版本中可能會(huì)發(fā)生變化。
          對象可以使用如下不同的方式進(jìn)行編碼:
          (1)string可以按照正常的字符串編碼格式進(jìn)行存儲(chǔ)或者使用int類型(表示64位有符號(hào)數(shù)區(qū)間中整數(shù)的字符串可以按照這種方式進(jìn)行編碼以便節(jié)省存儲(chǔ)空間);
          (2)lists可以被編碼為ziplist或者linkedlist格式。對于規(guī)模較小的鏈表而言,可以使用ziplist來表示以便節(jié)省存儲(chǔ)空間;
          (3)sets可以被編碼為intset或者h(yuǎn)ashtable格式。intset作為一種特別的編碼方式可以用于僅有整數(shù)構(gòu)成的規(guī)模較小的集合中;
          (4)hashes可以被編碼為zipmap或者h(yuǎn)ashtable。zipmap可以用于對規(guī)模較小的hashes進(jìn)行編碼;
          (5)sorted
          sets可以編碼為ziplist或者skiplist。對于list類型,規(guī)模較小的有序集合(sorted
          sets)可以使用ziplist進(jìn)行編碼,而skiplist可以用于對任何大小的有序集合進(jìn)行編碼。
          需要注意的是:你一旦執(zhí)行了一種使得Redis無法保持能夠節(jié)約存儲(chǔ)空間的編碼方式的操作后,所有特殊編碼的類型將會(huì)被自動(dòng)轉(zhuǎn)換為普通類型。
          返回值:對于不同的子命令將會(huì)有不同的返回值。
          (1)對于refcount和idletime子命令,返回值為整型(integers)。
          (2)對于encoding子命令將會(huì)返回一個(gè)塊回復(fù)(bulk
          reply)。
          (3)如果你要查看的object已經(jīng)丟失,那么將會(huì)返回一個(gè)null塊。


          可以通過如下實(shí)例進(jìn)行測試:lpush mylist “hello world”

           

           


          通過上述測試可以了解到,Redis
          2.2.6版本中對對象處于IDLE狀態(tài)的時(shí)間統(tǒng)計(jì)的時(shí)間粒度為10秒。
          該命令自2.2.3版本后可用。

          8.PERSIST
          語法:PERSIST
          key
          說明:移除與key相關(guān)聯(lián)的超時(shí)時(shí)間。該操作的時(shí)間復(fù)雜度為O(1)。
          返回值:如果超時(shí)時(shí)間被移除,那么返回者為1;如果該key不存在或者沒有與之相關(guān)聯(lián)的超時(shí)時(shí)間,那么返回值將為0.

           

          該命令自2.1.2版本后可用。

          9.RANDOMKEY
          語法:RANDOMKEY
          說明:從當(dāng)前選擇的數(shù)據(jù)庫中返回一個(gè)隨機(jī)的key。該操作的時(shí)間復(fù)雜度為O(1)。
          返回值:返回隨機(jī)key;如果數(shù)據(jù)庫為空時(shí),那么將返回nil。

           

          該命令的實(shí)例如下所示:


           
          該命令自0.0.7版本后可用。

           

          10.RENAME
          語法:RENAME key
          newkey
          說明:將指定的key命名為newkey。該操作的時(shí)間復(fù)雜度為O(1)。當(dāng)源和目標(biāo)的名稱相同或指定的key不存在時(shí),將會(huì)返回一個(gè)錯(cuò)誤。如果newkey已經(jīng)存在時(shí),它將會(huì)被重寫。
          返回值:返回Redis定義的狀態(tài)碼。
          該命令自0.0.7版本后可用。

          11.RENAMENX
          語法:RENAMENX
          key
          newkey
          說明:在newkey不存在的情況下將key命名為newkey。如果源和目標(biāo)的名稱相同或者指定的key不存在時(shí)返回一個(gè)錯(cuò)誤。該操作的時(shí)間復(fù)雜度為O(1)。

           

          返回值:如果key被命名為newkey,那么返回值為1;如果newkey已經(jīng)存在,那么返回值為0。
          該命令自0.0.7版本后可用。

          12.SORT
          語法:SORT
          key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC]
          [ALPHA] [STORE destination]
          說明:返回或按key存儲(chǔ)包含在列表(list)、集合(set)或者有序集合(sorted
          set)中的元素。該操作的時(shí)間復(fù)雜度為O(N+M*log(M)),此處N是將要排序的列表(list)或者集合(set)中元素的個(gè)數(shù),而M為將要返回的元素個(gè)數(shù)。在元素未被排序時(shí),復(fù)雜度在現(xiàn)階段是O(N)。在下一個(gè)發(fā)行版本中,其中的拷貝這一步驟將會(huì)被避免。
          在默認(rèn)情況下,排序是數(shù)字型的,并且元素通過他們的值進(jìn)行比較,值被解釋為雙精度浮點(diǎn)數(shù)。
          假設(shè)mylist是一組數(shù)字的列表,最簡單的SORT命令形式如下所示:
          SORT
          mylist


          假設(shè)mylist中存儲(chǔ)有1-10這些值,使用該命令會(huì)有如下的輸出結(jié)果:

           

           

          如果你希望使用降序順序來排列元素,可以使用DESC修飾符,如下所示:
          SORT mylist
          DESC
          當(dāng)mylist中包含字符串并且你希望使用字母順序進(jìn)行排列時(shí),可以使用ALPHA修飾符,如下所示:
          SORT mylist
          ALPHA


          使用該命令后,會(huì)有以下輸出結(jié)果:

           


          返回元素的個(gè)數(shù)可以通過LIMIT修飾符進(jìn)行限制。使用該修飾符時(shí)需要指定起始元素的偏移值和將要返回的元素的總數(shù)。如下所示:
          SORT mylist
          LIMIT 0
          5
          通過外部keys進(jìn)行排序
          有時(shí)候你希望通過使用外部keys作為權(quán)值而并非比較列表(list)、集合(set)或者有序集合(sorted
          set)中的真實(shí)元素來進(jìn)行排序。例如,假如
          列表mylist中包含元素1、2和3,分別表示存儲(chǔ)在object_1、object_2和object_3中對象的唯一ID。當(dāng)這些對象具有存儲(chǔ)在weight_1、weight_2和weight_3中的相關(guān)聯(lián)的權(quán)值時(shí),SORT可以使用這些權(quán)值來排序mylist。如下所示:
          SORT
          mylist BY
          weight_*
          BY選項(xiàng)選用了一個(gè)模式(本例中為weight_*)來生成用來排序的keys。這些keys的名稱可以通過取代模式中的“*”符號(hào)來加以生成,用于取代“*”符號(hào)的值是mylist列表中能夠首次匹配模式中的“*”符號(hào)的真實(shí)值(在本例中為1、2、和3)。

           

          假設(shè)在mylist列表中存有值1、2和3,object_1上存儲(chǔ)有值object_1,object_2上存儲(chǔ)有值object_2,object_3上存儲(chǔ)有值object_3,weight_1上存儲(chǔ)有值0.87,weight_2上存儲(chǔ)有值3,weight_3上存儲(chǔ)有值-6.4。如下所示:


           


          使用SORT mylist BY weight_*可以得到如下輸出:

           

           

          (1)跳過排序元素
          可以給BY選項(xiàng)指定一個(gè)并不存在的key,這將會(huì)使得SORT命令跳過排序操作。這是一種在不進(jìn)行排序的情況下取得外部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選項(xiàng)可以被多次使用,從而對原有列表(list)、集合(set)或有序集合(sorted
          set)中的每個(gè)元素取得更多的keys。同樣,使用特殊的模式#,可以獲取元素本身。如下所示:
          SORT mylist BY weight_* GET
          object_* GET #


          使用上述命令后,可以得到如下輸出:

           


          (3)存儲(chǔ)排序操作的結(jié)果
          在默認(rèn)情況下,SORT向客戶端返回排序后的元素。使用STORE選項(xiàng),可以將結(jié)果存儲(chǔ)在一個(gè)列表中,用戶可以同時(shí)指定與列表相關(guān)聯(lián)的key。如下所示:
          SORT
          mylist BY weight_* SRORE
          resultkey
          (4)在BY和GET選項(xiàng)中使用hashes
          你可以對hash字段使用BY和GET選項(xiàng),語法如下:
          SORT mylist
          BY weight_*->fieldname GET
          object_*->fieldname
          字符串“->”用來區(qū)分hash字段名稱和key名稱。
          返回值:排序元素的列表。
          該命令自0.0.7版本后可用。

          13.TTL
          語法:TTL
          key
          說明:如果指定的key有與之相關(guān)聯(lián)的超時(shí)時(shí)間,那么將會(huì)返回該key還能存活的時(shí)間。該操作的時(shí)間復(fù)雜度為O(1)。這一自省能力使得Redis客戶端能夠查看一個(gè)指定的key還能夠作為dataset的一部分存在多長時(shí)間。
          返回值:以秒為單位的TTL(Time
          To Live);如果指定的key不存在或者沒有與之相關(guān)聯(lián)的超時(shí)時(shí)間,那么便會(huì)返回-1。
          該命令自0.1000版本后可用。

          14.
          TYPE
          語法: TYPE
          key
          說明:返回存儲(chǔ)在指定key上的值所具有的數(shù)據(jù)類型的字符串描述。該操作的時(shí)間復(fù)雜度為O(1)。數(shù)據(jù)類型可以是:string、list、set、zset和hash。
          返回值:存儲(chǔ)在key上的值的數(shù)據(jù)類型,如果該key不存在,那么返回值為none。
          該命令自0.0.7版本后可用。

           

          posted on 2012-06-19 11:29 強(qiáng)強(qiáng) 閱讀(742) 評(píng)論(0)  編輯  收藏 所屬分類: Redis

          主站蜘蛛池模板: 揭西县| 康平县| 赣州市| 林芝县| 樟树市| 杂多县| 明星| 洞口县| 桑植县| 灵宝市| 微山县| 莲花县| 达拉特旗| 巨野县| 黑河市| 海城市| 甘谷县| 株洲市| 浮梁县| 鹿泉市| 临武县| 奎屯市| 寻乌县| 六枝特区| 静乐县| 赫章县| 瓦房店市| 西林县| 临猗县| 安远县| 镇远县| 定结县| 石嘴山市| 凤阳县| 株洲县| 遵义县| 防城港市| 灵石县| 阜新| 榆中县| 荔浦县|