溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis基本數(shù)據(jù)結(jié)構(gòu)總結(jié)

發(fā)布時間:2020-08-28 19:17:06 來源:網(wǎng)絡(luò) 閱讀:230 作者:sshpp 欄目:開發(fā)技術(shù)

Redis的特點在于其讀寫速度特別快,因為是存儲在內(nèi)存中的,其非常適合于處理大數(shù)據(jù)量的情況;還有一個是其不同于其他的關(guān)系型數(shù)據(jù)庫,Redis是非關(guān)系型數(shù)據(jù)庫,也就是我們常說的NoSQL,其并不需要一開始去創(chuàng)建好表結(jié)構(gòu),可以存儲自定義的數(shù)據(jù);還有Redis是分布式的,其可以主從分離,主從復(fù)制,比如說我們不可能只用一臺Redis服務(wù)器來處理客戶端的請求,因為這樣畢竟是存在風(fēng)險,如果服務(wù)器掛掉了,那么其數(shù)據(jù)就會丟失,而且無法找回,所以存在這么一種方案:多個主服務(wù)器用來處理客戶端的請求,接著多個Redis分服務(wù)器用來將主服務(wù)器的數(shù)據(jù)同步到MySQL,這樣在Redis服務(wù)器掛掉的時候,我們還是可以通過訪問MySQL數(shù)據(jù)庫從而得到數(shù)據(jù);

很多人說Redis和memcached比較相像,但是我沒有使用過memcached,所以只是總結(jié)了別人的比較。Redis擁有5個數(shù)據(jù)結(jié)構(gòu),而memcached只有一個字符串的數(shù)據(jù)結(jié)構(gòu),其只能通過append命令將數(shù)據(jù)添加到字符串的末尾,并且把該字符串當(dāng)作一個列表在使用,在刪除數(shù)據(jù)的時候,redis可以直接通過remove命令將其真正的刪除,但是memcached只能夠通過黑名單隱藏該數(shù)據(jù)從而避免對該數(shù)據(jù)進(jìn)行讀取,更新。

五種數(shù)據(jù)結(jié)構(gòu)

這五種數(shù)據(jù)結(jié)構(gòu)分別是STRING(字符串)、LIST(列表)、SET(集合)、HASH(哈希)、ZSET(有序集合);

  • 字符串:包括字符串、整數(shù)和浮點數(shù);

  • 列表:一個鏈表,鏈表上面的每個結(jié)點都是一個字符串,其遵從隊列的訪問格式-先進(jìn)先出,也就是從鏈表的結(jié)尾進(jìn)行插入,鏈表的頭部進(jìn)行彈出;

  • 集合:里面是一個容器,他不允許存在相同的元素,每個值都是獨一無二的;

  • 哈希:是一個鍵值對組合而成的無序散列表,其的鍵同樣是不允許重復(fù)的;

  • 有序集合:是在集合的基礎(chǔ)之上進(jìn)行了排序;

在了解那五個操作相關(guān)的命令之前,需要先了解關(guān)于鍵的相關(guān)的命令:

Key

  1. DEL key

    移除給定的一個或者多個key。

  2. KEYS pattern

    查找符合給定模式的key,注意其匹配的模式怎么使用,包括了?、*、[]等等。

  3. RANDOMKEY

    從當(dāng)前數(shù)據(jù)庫中隨機(jī)返回一個key。

  4. EXPIRE key seconds

    為給定的key設(shè)置存活時間,時間一過則把對應(yīng)的key進(jìn)行銷毀,注意單位為秒。

  5. TTL key

    獲取key剩余的存活時間,單位為秒,和上面的命令相對應(yīng),如果該key不存在或者是過期的話,則返回-2/-1(在不同數(shù)據(jù)庫返回的值不一樣?)。

  6. MOVE key db

    將key移動到指定的db,默認(rèn)情況下使用的是0號數(shù)據(jù)庫,注意要移動到相應(yīng)的數(shù)據(jù)庫(SELECT db)才能看到。

  7. RENAME key newkey

    將key更改為新的key,注意如果newkey在數(shù)據(jù)庫中已經(jīng)存在,那么舊的key的數(shù)據(jù)會把已經(jīng)存在的新的key給覆蓋掉。

  8. TYPE key

    返回指定的key的類型,如果不存在則返回的是none,而不是nil(進(jìn)行操作才返回的)。

  9. OBJECT REFCOUNT key | OBJECT ENCODING key | OBJECT IDLETIME key

    分別返回key所引用的次數(shù),key對應(yīng)的編碼,key空閑的時間(沒有讀也沒有寫,單位為秒)。

  10. RENAMENX key newkey

    在RENMAE的基礎(chǔ)上判斷key是否存在,更加的安全。

  11. EXPIREAT key timestamp

    設(shè)置時間戳。

  12. PERSIST key

    移除給定key的生存時間,也可以使用EXPIRE 來重置。

  13. SORT key [BY pattern] [LIMIT offset count] [GETpattern] [ASC|DESC] [ALPHA] [STOREdestination]

    這個方法只能用在LIST、SET、ZSET上,這里的pattern和之前的keys的pattern是一樣的,LIMIT則是用來限制返回的偏移量和數(shù)量,GET是獲取返回的指定的key的內(nèi)容,ASC是升序、DESC是降序, ALPHA則是用在對字符串進(jìn)行排序的時候,STORE則是指定存儲的地方,可以指定到一個key上,這樣就可以通過GET來訪問到。

STRING

  1. GET key

    獲取存儲在給定鍵的值。

  2. MGET key...

    獲取多個指定的鍵值。

  3. GETRANGE key start end

    獲取指定范圍的鍵值,支持反向操作,如果end超出實際范圍,則忽略,返回全值。

  4. GETSET key value

    集合了GET和SET的功能,不過其返回的是該鍵被設(shè)置之前的值,但是其的值已經(jīng)發(fā)生了改變 ,注意如果之前沒有該鍵,則返回nil。

  5. SET key value

    設(shè)置存儲在給定鍵中的值。

  6. SETNX key value

    注意在key已經(jīng)存在的情況下,不進(jìn)行任何操作,也就是說 SET if key not exist;可能存在一個鎖的問題。

  7. SETEX key seconds value

    集合了SET和EXPIRE的功能,如果key存在,則覆蓋掉。

  8. SETRANGE key offset value

    從偏移量開始設(shè)置,注意的是當(dāng)這個value不足以把之前的value給覆蓋掉時,那么仍然會顯示之前沒有被覆蓋掉的值。這里返回的是字符串總的長度。如果空白字符串不存在的話,則相當(dāng)于在空白字符串上進(jìn)行操作。

  9. MSET key value ...

    可以同時設(shè)置多個鍵值對,如果不像覆蓋掉key的話,可以使用MSETNX。

  10. MSETNX key value...

    和SETNX的作用是一樣的,這里只有全部key都設(shè)置成功,才能返回1,只要有一個key已經(jīng)存在,就會返回0。

  11. APPEND key value

    追加字符串值,返回新字符串長度,可以添加空字符串,返回的是原來的長度。

  12. STRLEN key

    返回字符串長度。

  13. DECR key

    將key的值減一,如果不存在key,則會先進(jìn)行SET,并且將該鍵值初始化為0。該命令只能使用在數(shù)字上面。

  14. DECRBY key decrement

    在上面的基礎(chǔ)之上減去指定的值。

  15. INCR key  INCRBY key increment

    同DECR和DECRBY

  16. SETBIT key offset set_or_clean

    將字符串看作是二進(jìn)制,并且將字符串指定偏移量的二進(jìn)制位設(shè)置為指定值,可以是set或者clean。同樣的,如果key不存在,則幫其進(jìn)行設(shè)置。

  17. GETBIT key offset

    把字符串看作是二進(jìn)制串,并且返回二進(jìn)制串中指定偏移量的二進(jìn)制位的值。

LIST

在LIST中,不需要進(jìn)行相應(yīng)的SET操作,如果其不存在,其會自動創(chuàng)建,并且初始化為空列表。

  1. LPUSH key value...

    把多個鍵值加入到列表key的表頭中,返回列表的長度。

  2. LPUSHX key value...

    在上面的基礎(chǔ)之上,如果key不存在,則不進(jìn)行任何操作,即 LPUSH if key exists。

  3. RPUSH key value

    插入到表尾。

  4. RPUSHX key value

    類似LPUSHX。

  5. LPOP key

    移出并且返回頭元素。

  6. RPOP key

    移出并且返回尾元素。

  7. BLPOP key... timeout

    相當(dāng)于LPOP的阻塞版本,如果其列表沒有元素的時候,則會一直阻塞到列表中存在值并且進(jìn)行LPOP操作,我們還可以設(shè)置超時時間,如果是0的話,則表明其可以阻塞到無限時間長。

  8. BRPOP key... timeout

    參照BLPOP。

  9. LLEN key

    返回列表的長度。

  10. LRANGE key start stop

    返回只等區(qū)間長度的元素,注意stop要大于start,否則返回一個空列表。

  11. LREM key count value

    刪除列表中和value相等的元素。這個取決于count的值,如果為正數(shù),正向搜索刪除,如果為負(fù)數(shù),反向搜索刪除,如果等于0,則全部刪除;返回被刪除的個數(shù)。

  12. LSET key index value

    設(shè)置指定下標(biāo)的值為新的value。

  13. LTRIM key start stop

    將指定返回值保留下來,其余均刪除。

  14. LINDEX key index

    返回指定下標(biāo)index的值。

  15. LINSERT key BEFORE|AFTER privot value

    將key添加到privot之前或者之后,如果privot不存在或者列表為空,則不進(jìn)行任何操作。如果成功則返回列表長度。

  16. RPOPLPUSH source destination

    將source中的尾元素彈出并且插到destination列表的頭元素的位置上,可以簡單的理解為其進(jìn)行了插隊的操作;如果destination不存在則默認(rèn)設(shè)置為空列表,但是如果source不存在則不進(jìn)行任何的操作。

  17. BROPLPUSH source destination timeout

    上面版本的阻塞版本,如果timeout為0,則可以無限期阻塞。

SET

  1. SADD key-name [item...]

    添加多個元素到集合中,并且返回添加到集合中的的元素的個數(shù)。

  2. SREM key-name [item...]

    刪除多個元素到集合中,并且返回刪除的元素的個數(shù)。

  3. SISMEMBER key-name item

    判斷該元素是否存在于該集合中。

  4. SCARD key-name

    返回該集合的元素數(shù)量。

  5. SMEMBERS key-name

    返回該集合的所有元素。

  6. SRANDMEMBER key-name [count]

    隨機(jī)的返回該集合的count個元素,如果count是正數(shù)的話,不會重復(fù),但是是負(fù)數(shù)的話,則可能就會重復(fù)。

  7. SPOP key-name

    隨機(jī)的彈出并且返回該值。

  8. SMOVE from-key-name to-key-name item

    將該元素從from移動到to中,成功則返回1,相反返回0。

  9. SDIFF key-name [key-name...]

    返回在第一個集合中存在,其它集合不存在的元素,即取差集。

  10. SDIFFSTORE dest-key key-name [key-name...]

    分成DIFF和STORE來看,也就是將DIFF的結(jié)果存儲在dest-key中。

  11. SINTER key-name [key-name...]

    返回在所有集合中同時存在的元素,即取并集。

  12. SINTERSTORE dest-key key-name [key-name...]

    分成INTER和STORE來看,也就是將INTER的結(jié)果存儲在dest-key中。

  13. SUNION key-name [key-name...]

    返回在所有集合中存在的元素,即取交集。

  14. SUNIONSTORE dest-key key-name [key-name...]

    分成UNION和STORE來看,也就是將UNION的結(jié)果存儲在dest-key中。

有序集合

  1. ZADD key-name score member [score member...]

    將帶有給定分值的成員加入到有序集合中。

  2. ZREM key-name member [member..]

    從有序集合里面移除給定的成員,并且返回。

  3. ZCARD key-name

    返回有序集合中元素的數(shù)量。

  4. ZINCRBY key-name increment member

    給成員加上increment。

  5. ZCOUNT key-name min max

    返回值介于min和max之間的成員數(shù)量。

  6. ZRANK key-name member

    返回成員的排名。

  7. ZSCORE key-name member

    返回成員的分值。

  8. ZRANGE key-name start stop [WITHSCORES]

    返回排名介于start到stop的成員,如果WITHSCORES為True的話,則分值也一起返回,如果stop為-1的話,則返回全部。

  9. ZREVRANK key-name member

    分成REV和RANK來看,REV:成員從小到大進(jìn)行排列,RANK:返回具體的排名位置。

  10. ZREVRANGE key-name start stop [WITHSCORES]

    分成REV和RANGE來看,REV:成員從小到大進(jìn)行排列,RANGE:返回具體的排名位置。

  11. ZRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]

    返回分值介于min到max之間到所有成員,可以指定返回從偏移量開始的count個成員。

  12. ZREVRANGEBYSCORE key-name max min [WITHSCORES] [LIMIT offset count]

    返回同上,不過是成員已經(jīng)從大到小進(jìn)行排列,注意這里是max-min。

  13. ZREMRANGEBYRANK key-name start stop

    將ZRANGEBYRANK返回的成員刪除掉。

  14. ZREMRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]

    同樣的道理,將ZRANGEBYSCORE返回的成員刪除掉。

  15. ZINTERSTORE dest-key key-name [key-name...]

    和集合類似,分成INTER和STORE來看,也就是將INTER的結(jié)果存儲在dest-key中。

  16. ZUNIONSTORE dest-key key-name [key-name...]

    和集合類似,分成UNION和STORE來看,也就是將UNION的結(jié)果存儲在dest-key中。

散列

Hash,所以以H開頭

  1. HMSET key-name key value [key value...]

    設(shè)置一個或者多個鍵值對。

  2. HMGET key-name key...

    可以獲取多個鍵對應(yīng)的值。

  3. HDEL key-name key...

    刪除多個鍵值對,返回成功刪除的數(shù)量。

  4. HLEN key-name

    返回鍵值對數(shù)量

  5. HEXIST key-name key

    判斷該鍵值是否存在于散列中。

  6. HKEYS key-name

    獲取散列所有的鍵。

  7. HVALS key-name

    獲取散列所有的值。

  8. HGETALL key-name

    獲取所有的鍵值對。

  9. HINCREBY key-name key increment

    將key保存的值加上increment。

  10. HINCREBYFLOAT key-name key increment

    將key保存的值加上浮點數(shù)increment。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI