1. 程式人生 > >redis 命令詳解

redis 命令詳解

redis資料型別分為:字串型別、雜湊型別、列表型別、集合型別、有序集合型別。
    redis這麼火,它執行有多塊?一臺普通的膝上型電腦,可以在1秒鐘內完成十萬次的讀寫操作。
    原子操作:最小的操作單位,不能繼續拆分。即最小的執行單位,不會被其他命令插入。高併發下不存在競態條件。
    KEY的命名:一個良好的建議是article:1:title來儲存ID為1的文章的標題。
    一、前言。
        1、獲取key的列表:KEYS pattern 萬用字元有?*[]和轉義\
        2、key是否存在: EXISTS key 存在返回1,不存在返回0.
        3、建立key和刪除key:SET key 和 DEL key
        4、根據key獲取該鍵所儲存的redis資料型別:TYPE key。返回是string、list、hash、set、zset。下面會對這5種返回的redis資料型別逐一講解。
        5、rename oldkey newkey:對key重新命名,如果newkey存在則覆蓋。
        6、renamenx oldkey newkey:對key重新命名,如果newkey存在則不覆蓋。
        7、randomkey:隨即返回一個key
        8、move key db-index:將key移動到指定的資料庫中,如果key不存在或者已經在該資料庫中,則返回0。成功則返回1.




    二、Redis資料型別 Redis資料命令
      1、Redis資料型別一字串型別:
            這個很好理解,一個key儲存一個字串。如果你要存資料呢?轉換成Json或者其他的字串序列化。


      2、Redis資料命令一字串型別:
            1)賦值:SET key value。如set hello world
            2)取值:GET key。如get hello。返回是world
            3)自增:INCR key。就是Mysql的AUTO_INCREMENT。每次執行INCR key時,該key的值都會+1.若key不存在,則先建立一個0,然後+1,返回1。如果值不是整數則報錯。該操作是原子操作。
            4)自減:DECR key。將指定key的值減少1.如DECR num,就是num-1
            5)自增N:INCRBY key increment用來給指定key的值加increment。如INCRBY num 5就是num+5
            6)自減N:DECRBY key increment用來給指定key的值減increment。如DECRBY num 5就是num-5
            7)增加浮點數:INCRBYFLOAT key increment。
            8)向尾部追加:APPEND key value。如set test:key 123     append test:key 456      get test:key就是123456
            9)獲取長度:STRLEN key。
            10)同時給多個key 賦值:MSET title 這是標題 description 這是描述 content 這是內容。
            11)同時獲取多個key的值:MGET title description content
            12)位操作之獲取:GETBIT key offset。如字元a在redis中的儲存為01100001(ASCII為98),那麼GETBIT key 2就是1,GET key 0就是0。
            13)位操作之設定:SETBIT key offset value。如字元a在redis中的儲存為01100001(ASCII為98),那麼SETBIT key 6 0,SETBIT key 5 1那麼get key得到的是b。因為取出的二進位制為01100010。
            14)位操作之統計:BITCOUNT key [start] [end]:BITCOUNT key用來獲取key的值中二進位制是1的個數。而BITCOUNT key start end則是用來統計key的值中在第start和end之間的子字串的二進位制是1的個數(好繞啊)。
            15)位操作之位運算:BITOP operation resultKey key1 key2。operation是位運算的操作,有AND,OR,XOR,NOT。resultKey是把運算結構儲存在這個key中,key1和key2是參與運算的key,參與運算的key可以指定多個。


      3、Redis資料型別二雜湊型別:


        Redis是以字典(關聯陣列)的形式儲存的,一個key對應一個value。在字串型別中,value只能是一個字串。那麼在雜湊型別,也叫雜湊型別中,value對應的也是一個字典(關聯陣列)。那麼就可以理解,Redis的雜湊型別/雜湊型別中,key對應的value是一個二維陣列。但是欄位的值只可以是字串。也就是說只能是二維陣列,不能有更多的維度。


      4、Redis資料命令二雜湊型別:
            1)賦值:HSET key field value。如hset user name lane。hset user age 23
            2)取值:HGET key field。如hget user name,得到的是lane。
            3)同一個key多個欄位賦值:HMSET key field1 value1 field2 value2...
            4)同一個KEY多個欄位取值:HMGET key field1 fields2...
            5)獲取KEY的所有欄位和所有值:HGETALL key。如HGETALL user得到的是name lane age 23。每個返回都是獨立的一行。
            6)欄位是否存在:HEXISTS key field。存在返回1,不存在返回0
            7)當欄位不存在時賦值:HSETNX key field value。如果key下面的欄位field不存在,則建立field欄位,且值為value。如果field欄位存在,則不執行任何操作。它的效果等於HEXISTS + HSET。但是這個命令的優點是原子操作。再高的併發也不會怕怕。
            8)自增N:HINCREBY key field increment。同字串的自增型別,不再闡述。
            9)刪除欄位:DEL key field1 field2...刪除指定KEY的一個或多個欄位。
            10)只獲取欄位名:HKEYS key。與HGETALL類似,但是隻獲取欄位名,不獲取欄位值。
            11)只獲取欄位值:HVALS key。與HGETALL類似,但是隻獲取欄位值,不獲取欄位名。
            12)獲取欄位數量:HLEN key。


      5、Redis資料型別三列表型別:
            列表型別儲存了一個有序的字串列表。常用的操作是向兩端插入新的元素。時間複雜度為O(1)。結構為一個連結串列。記錄頭和尾的地址。看到這裡,Redis資料型別的列表型別一個重大的作用呼之欲出,那就是佇列。新來的請求插入到尾部,新處理過的從頭部刪除。另外,比如微博的新鮮事。比如日誌。列表型別就是一個下標從0開始的陣列。由於是連結串列儲存,那麼越靠近頭和尾的元素操作越快,越靠近中間則越慢。


      6、Redis資料命令三列表型別:
            1)向頭部插入:LPUSH key value1 value2...。返回增加後的列表長度。
            2)向尾部插入:RPUSH key value1 value2...。返回增加後的列表長度。
            3)從頭部彈出:LPOP key。返回被彈出的元素值。該操作先刪除key列表的第一個元素,再將它返回。
            4)從尾部彈出:RPOP key。返回被彈出的元素值。
            5)列表元素個數:LLEN key。key不存在返回0。
            6)獲取列表的子列表:LRANGE start end。返回第start個到第end個元素的列表。包含start和end。支援負數索引。-1表示最後一個元素,-2表示倒數第二個元素。
            7)刪除列表中指定值:LREM key count value。刪除key這個列表中,所有值為value的元素,只刪除count。如果有count+1個,那麼就保留最後一個。count不存在或者為0,則刪除所有的。如果count大於0,則刪除從頭到尾的count個,如果count小於0,則刪除從尾到頭的count個。
            8)獲取指定索引值:LINDEX key index。如LINDEX key 0就是列表的第一個元素。index可以是負數。
            9)設定索引和值:LSET key index value。這個操作只是修改指定key且指定index的值。如果index不存在,則報錯。
            10)保留片段,刪除其它:LTRIM key start end。保留start到end之間的所有元素,含start和end。其他全部刪除。
            11)向列表插入元素:LINSERT key BEFORE/AFTER value1 value2。從列表頭開始遍歷,發現值為value1時停止,將value2插入,根據BEFORE或者AFTER插入到value1的前面還是後面。
            12)把一個列表的一個元素轉到另一個列表:RPOPLPUSH list1 list2。將列表list1的右邊元素刪除,並把該與元素插入到列表list2的左邊。原子操作。


      7、Redis資料型別四集合型別:
            集合型別是為了方便對多個集合進行操作和運算。集合中每個元素不同且沒有順序的概念,每個元素都是且只能是一個字串。常用操作是對集合插入、刪除、判斷等操作。時間複雜度尾O(1)。可以進行交集、並集、差集運算。例如文章1的有3個標籤,是一個Redis資料型別集合型別儲存。文章2有3個標籤,有一個Redis資料型別集合型別儲存。文章是1是mysql,文章2是講redis。那麼交集是不是就交出了一個數據庫?(假設資料庫這個tag在兩篇文字都有)。集合型別在redis中的儲存是一個值為空的散列表。


      8、Redis資料命令四集合型別:
            1)增加:SADD key value。
            2)刪除:SREM key value。
            3)獲取指定集合的所有元素:SMEMBERS key。
            4)判斷某個元素是否存在:SISMEMBER key value。
            5)差集運算:SDIFF key1 key2...。對多個集合進行差集運算。
            6)交集運算:SINNER key1 key2...。對多個集合進行交集運算。
            7)並集運算:SUNION key1 key2...。對多個集合進行並集運算。
            8)獲取集合中元素個數:SCARD key。返回集合中元素的總個數。
            9)對差集、交集、並集運算的結果存放在一個指定的key中:SDIFFSTORE storekey key1 key2。對key1和key2求差集,結果存放在key為storekey的集合中。SINNERSTORE和SUNIONSTORE類似。
            10)獲取集合中的隨即元素:SRANDMEMBER key [count]。引數count可選,如果count不存在,則隨即一個。count大於0,則是不重複的count個元素。count小於0,則是一共|count|個元素,可以重複。
            11)隨即彈出一個元素:SPOP key。隨即從集合中彈出一個元素並刪除,將該元素的值返回。
 
      9、Redis資料型別五有序集合型別:
            集合型別是無序的,每個元素是唯一的。那麼有序集合就是有序的,每個元素是唯一的。有序集合型別和集合型別的差別是,有序集合為每個元素配備了一個屬性:分數。有序集合就是根據分數來排序的。有序集合是使用散列表和跳躍表實現的。所以和列表相比,操作中間元素的速度也很快。時間複雜度尾O(log(N))。Redis資料型別中的有序集合型別比Redis資料型別中的列表型別更加耗費資源。


      10、Redis資料命令五有序集合型別:
            1)增加:ZADD key sorce1 value1 sorce2 value2...。
            2)獲取分數:ZSCORE key value。獲取key的有序集合中值為value的元素的分數。
            3)獲取排名在某個範圍內的元素列表:ZRANFGE key start stop [WITHSCORE]。獲取排名在start和end之間的元素列表,包含start和end2個元素。每個元素一行。如果有WITHSCORE引數,則一行元素值,一行分數。時間複雜度為O(LOGn+m)。如果分數相同,則0<0<A<Z<a<z。
            4)獲取指定分數範圍的元素:ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]。獲取分數在min和max之間的元素列表。含兩頭。每個元素一行。如果有WITHSCORE引數,則一行元素值,一行分數。如果min大於max則順序反轉。
            5)為某個元素增加分數:ZINCRBY key increment value。指定的有序集合的值為value的元素的分數+increment。返回值後更改後的分數。
            6)獲取集合中元素的數量:ZCARD key。
            7)獲取指定分數範圍內的元素個數:ZCOUNT key min max。
            8)刪除一個或多個元素:ZREM key value1 value2...
            9)根據排名範圍刪除元素:ZREMRANGEBYRANK key start end。刪除排名在start和end中的元素。
            10)按照分數範圍刪除元素:ZREMRANGEBYSCORE key min max。
            11)獲得元素排名(正序):ZRANK key value。獲取value在該集合中的從小到大的排名。
            12)獲得元素排名(倒序):ZREVRANK key value。獲取value在該集合中從大到小的排名。
            13)有序集合的交集:ZINTERSTORE storekey key1 key2...[WEIGHTS weight [weight..]] [AGGREGATE SUM|MIN|MAX]。用來計算多個集合的交集,結果儲存在storekey中。返回值是storekey的元素個數。AGGREGATE為SUM則storekey集合的每個元素的分數是參與計算的集合分數和。MIN是參與計算的分數最小值。MAX是參與計算分數最大值。WEIGHTS 設定每個集合的權重,如WEIGHTS 1 0.1。那麼集合A的每個元素分數*1,集合B的每個元素分數*0.1
            14)有序集合的並集:ZUNIONSTORE storekey key1 kye2...[WEIGHTS weight [weight..]] [AGGREGATE SUM|MIN|MAX]