Redis數據結構執行時間

String

  • String是Redis的基礎數據類型,Redis沒有Int、Float、Boolean等數據類型的概念,所有的基本類型在Redis中都以String體現。

  • SET:時間複雜度O(1)

  • GET:時間複雜度O(1)

  • GETSET:時間複雜度O(1)

  • MSET:時間複雜度O(N)

  • MSETNX:同MSET,如果指定的key中有任意一個已存在,則不進行任何操作,時間複雜度O(N)

  • MGET:獲取多個key對應的value,時間複雜度O(N)

  • INCR:將key對應的value值自增1,並返回自增後的值。只對可以轉換爲整型的String數據起作用。時間複雜度O(1)

  • INCRBY:將key對應的value值自增指定的整型數值,並返回自增後的值。只對可以轉換爲整型的String數據起作用。時間複雜度O(1)

  • DECR/DECRBY:同INCR/INCRBY,自增改爲自減。

List

  • Redis的List是鏈表型的數據結構,可以使用LPUSH/RPUSH/LPOP/RPOP等命令在List的兩端執行插入元素和彈出元素的操作。雖然List也支持在特定index上插入和讀取元素的功能,但其時間複雜度較高(O(N)),應小心使用。

  • LPUSH:向指定List的左側(即頭部)插入1個或多個元素,返回插入後的List長度。時間複雜度O(N),N爲插入元素的數量

  • RPUSH:同LPUSH,向指定List的右側(即尾部)插入1或多個元素

  • LPOP:從指定List的左側(即頭部)移除一個元素並返回,時間複雜度O(1)

  • RPOP:同LPOP,從指定List的右側(即尾部)移除1個元素並返回

  • LPUSHX/RPUSHX:與LPUSH/RPUSH類似,區別在於,LPUSHX/RPUSHX操作的key如果不存在,則不會進行任何操作

  • LLEN:時間複雜度O(1)

  • LRANGE:返回指定List中指定範圍的元素(雙端包含,即LRANGE key 0 10會返回11個元素),時間複雜度O(N)。應儘可能控制一次獲取的元素數量,一次獲取過大範圍的List元素會導致延遲,同時對長度不可預知的List,避免使用LRANGE key 0 -1這樣的完整遍歷操作。

注意謹慎使用的List命令如下:

  • LINDEX:返回指定List指定index上的元素,如果index越界,返回nil。index數值是迴環的,即-1代表List最後一個位置,-2代表List倒數第二個位置。時間複雜度O(N)

  • LSET:將指定List指定index上的元素設置爲value,如果index越界則返回錯誤,時間複雜度O(N),如果操作的是頭/尾部的元素,則時間複雜度爲O(1)

  • LINSERT:向指定List中指定元素之前/之後插入一個新元素,並返回操作後的List長度。如果指定的元素不存在,返回-1。如果指定key不存在,不會進行任何操作,時間複雜度O(N)

Hash

Hash即哈希表,Redis的Hash和傳統的哈希表一樣,是一種field-value型的數據結構,可以理解成將HashMap搬入Redis。

Hash非常適合用於表現對象類型的數據,用Hash中的field對應對象的field即可。

Hash的優點包括:

  1. 可以實現二元查找,如"查找ID爲1000的用戶的年齡"

  2. 比起將整個對象序列化後作爲String存儲的方法,Hash能夠有效地減少網絡傳輸的消耗

  3. 當使用Hash維護一個集合時,提供了比List效率高得多的隨機訪問命令

與Hash相關的常用命令:

  • HSET:將key對應的Hash中的field設置爲value。如果該Hash不存在,會自動創建一個。時間複雜度O(1)

  • HGET:返回指定Hash中field字段的值,時間複雜度O(1)

  • HMSET/HMGET:同HSET和HGET,可以批量操作同一個key下的多個field,時間複雜度:O(N),N爲一次操作的field數量

  • HSETNX:同HSET,但如field已經存在,HSETNX不會進行任何操作,時間複雜度O(1)

  • HEXISTS:判斷指定Hash中field是否存在,存在返回1,不存在返回0,時間複雜度O(1)

  • HDEL:刪除指定Hash中的field(1個或多個),時間複雜度:O(N),N爲操作的field數量

  • HINCRBY:同INCRBY命令,對指定Hash中的一個field進行INCRBY,時間複雜度O(1)

注意謹慎使用的Hash命令如下:

  • HGETALL:返回指定Hash中所有的field-value對。返回結果爲數組,數組中field和value交替出現。時間複雜度O(N)

  • HKEYS/HVALS:返回指定Hash中所有的field/value,時間複雜度O(N)

Set

Redis Set是無序的,不可重複的String集合。

與Set相關的常用命令:

  • SADD:向指定Set中添加1個或多個member,如果指定Set不存在,會自動創建一個。時間複雜度O(N),N爲添加的member個數

  • SREM:從指定Set中移除1個或多個member,時間複雜度O(N),N爲移除的member個數

  • SRANDMEMBER:從指定Set中隨機返回1個或多個member,時間複雜度O(N),N爲返回的member個數

  • SPOP:從指定Set中隨機移除並返回count個member,時間複雜度O(N),N爲移除的member個數

  • SCARD:返回指定Set中的member個數,時間複雜度O(1)

  • SISMEMBER:判斷指定的value是否存在於指定Set中,時間複雜度O(1)

  • SMOVE:將指定member從一個Set移至另一個Set

慎用的Set相關命令:

  • SMEMBERS:返回指定Hash中所有的member,時間複雜度O(N)

  • SUNION/SUNIONSTORE:計算多個Set的並集並返回/存儲至另一個Set中,時間複雜度O(N),N爲參與計算的所有集合的總member數

  • SINTER/SINTERSTORE:計算多個Set的交集並返回/存儲至另一個Set中,時間複雜度O(N),N爲參與計算的所有集合的總member數

  • SDIFF/SDIFFSTORE:計算1個Set與1或多個Set的差集並返回/存儲至另一個Set中,時間複雜度O(N),N爲參與計算的所有集合的總member數

Sorted Set

Redis Sorted Set是有序的、不可重複的String集合。Sorted Set中的每個元素都需要指派一個分數(score),Sorted Set會根據score對元素進行升序排序。如果多個member擁有相同的score,則以字典序進行升序排序。

Sorted Set非常適合用於實現排名。

Sorted Set的主要命令:

  • ZADD:向指定Sorted Set中添加1個或多個member,時間複雜度O(Mlog(N)),M爲添加的member數量,N爲Sorted Set中的member數量

  • ZREM:從指定Sorted Set中刪除1個或多個member,時間複雜度O(Mlog(N)),M爲刪除的member數量,N爲Sorted Set中的member數量

  • ZCOUNT:返回指定Sorted Set中指定score範圍內的member數量,時間複雜度:O(log(N))

  • ZCARD:返回指定Sorted Set中的member數量,時間複雜度O(1)

  • ZSCORE:返回指定Sorted Set中指定member的score,時間複雜度O(1)

  • ZRANK/ZREVRANK:返回指定member在Sorted Set中的排名,ZRANK返回按升序排序的排名,ZREVRANK則返回按降序排序的排名。時間複雜度O(log(N))

  • ZINCRBY:同INCRBY,對指定Sorted Set中的指定member的score進行自增,時間複雜度O(log(N))

慎用的Sorted Set相關命令:

  • ZRANGE/ZREVRANGE:返回指定Sorted Set中指定排名範圍內的所有member,ZRANGE爲按score升序排序,ZREVRANGE爲按score降序排序,時間複雜度O(log(N)+M),M爲本次返回的member數

  • ZRANGEBYSCORE/ZREVRANGEBYSCORE:返回指定Sorted Set中指定score範圍內的所有member,返回結果以升序/降序排序,min和max可以指定爲-inf和+inf,代表返回所有的member。時間複雜度O(log(N)+M)

  • ZREMRANGEBYRANK/ZREMRANGEBYSCORE:移除Sorted Set中指定排名範圍/指定score範圍內的所有member。時間複雜度O(log(N)+M)

其他常用命令

  • EXISTS:判斷指定的key是否存在,返回1代表存在,0代表不存在,時間複雜度O(1)

  • DEL:刪除指定的key及其對應的value,時間複雜度O(N),N爲刪除的key數量

  • EXPIRE/PEXPIRE:爲一個key設置有效期,單位爲秒或毫秒,時間複雜度O(1)

  • TTL/PTTL:返回一個key剩餘的有效時間,單位爲秒或毫秒,時間複雜度O(1)

  • RENAME/RENAMENX:將key重命名爲newkey。使用RENAME時,如果newkey已經存在,其值會被覆蓋;使用RENAMENX時,如果newkey已經存在,則不會進行任何操作,時間複雜度O(1)

  • TYPE:返回指定key的類型,string, list, set, zset, hash。時間複雜度O(1)

  • CONFIG GET:獲得Redis某配置項的當前值,可以使用*通配符,時間複雜度O(1)

  • CONFIG SET:爲Redis某個配置項設置新值,時間複雜度O(1)

  • CONFIG REWRITE:讓Redis重新加載redis.conf中的配置

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章