用了這么久redis,你了解幾種redis數(shù)據(jù)類(lèi)型

簡(jiǎn)單介紹一下redis的幾種數(shù)據(jù)類(lèi)型: Strings,Lists,SetsHashe,Sorted sets,Bitmaps and HyperLogLogs

Strings

Strings是redis的最基礎(chǔ)的類(lèi)型,意味著reds stings可以包含任何數(shù)據(jù)類(lèi)型,普通的string,integer…自不必說(shuō),JPEG 圖片,Java對(duì)象,文件等等都可以序列化成strings。

最大限制:512M

常用操作:

  • INCR, DECR, INCRBY:通過(guò)strings實(shí)現(xiàn)原子化操作
  • APPEND:改變字符串
  • GETRANGE , SETRANGE: 自由獲取或者變更Strings
  • GETBIT, SETBIT:對(duì)Strings進(jìn)行位操作,如通過(guò)redis創(chuàng)建一個(gè)bloom filter

其他: available string commands

Lists

Redis Lists是strings的集合list,順序?yàn)樵氐牟迦腠樞?。?dāng)然也可以通過(guò)命令在head或者tail插入元素。即使list很大,在head或者tail增刪元素的速度也很快,但是如果操作中間的元素,則復(fù)雜度為O(N)。

lists最大長(zhǎng)度: 2^32 - 1 (4294967295, 也就是每個(gè)list可以存40億個(gè)元素)

有意思的案例:

  • 創(chuàng)建設(shè)計(jì)網(wǎng)絡(luò)中的時(shí)間線(xiàn),使用 LPUSH 增加元素,而使用LRANGE獲取最新插入的幾個(gè)元素
  • 使用 LPUSHLTRIM 創(chuàng)建一個(gè)固定容量的list,只記錄最新的幾個(gè)元素
  • 使用list結(jié)構(gòu)創(chuàng)建一個(gè)消息隊(duì)列,如ruby的Resque - 用于創(chuàng)建后臺(tái)任務(wù)
  • BLPOP

其他: available commands operating on lists

Sets

Redis Sets是strings的無(wú)序無(wú)重復(fù)集合。增刪查的復(fù)雜度是0(1),基于sets可以做 unions, intersections 等操作

sets最大長(zhǎng)度: 2^32 - 1 (4294967295, 也就是每個(gè)set可以存40億個(gè)元素)

一些案例:

  • trace 一些唯一事件,比如說(shuō)記錄一篇blog的訪(fǎng)問(wèn)ip,僅僅只需要使用 SADD ,而不需要考慮是否重復(fù)。
  • 創(chuàng)建一個(gè)標(biāo)簽系統(tǒng),給對(duì)象標(biāo)記不同的tag
  • 使用 SPOP 或者 SRANDMEMBER 命令從一個(gè)set中隨機(jī)抽取元素
  • 其他: full list of Set commands

Hashes

Redis Hashes 是用來(lái)存儲(chǔ)一些鍵值對(duì)的,舉個(gè)栗子:

@cli
HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000

每一個(gè)hash都可以存儲(chǔ)至多 2^32 - 1個(gè) 鍵值對(duì)

其他: full list of Hash commands

Sorted sets

redis Sorted Sets 和sets類(lèi)型相似,但最大的不同點(diǎn)是 Sorted Set 的每一個(gè)元素都有一個(gè)分值,這個(gè)分值可以用作排序,雖然元素是不重復(fù)的,但分值可能相同。可以獲取不同分值段內(nèi)的一些元素。

sorted sets 可以做很多有意思的事情,與直接操作數(shù)據(jù)庫(kù)相比,有很好的性能

  • 比如設(shè)計(jì)一個(gè)在線(xiàn)游戲的選手積分榜,使用ZADD來(lái)增加一個(gè)新的記錄,使用 ZRANGE 獲取前幾名的選手,也可以使用 ZRANGE來(lái)獲取一個(gè)選手的排名。使用ZRANK 和 ZRANGE可以吃很快查詢(xún)到一個(gè)元素附近的幾個(gè)元素
  • Sorted Sets常常被用來(lái)做作redis中的索引數(shù)據(jù),比如有很多用戶(hù)的hash數(shù)據(jù),可以使用用戶(hù)的年齡作為分值,用戶(hù)id作為值,使用ZRANGEBYSCORE就可以吃很快查詢(xún)出一個(gè)年齡區(qū)間內(nèi)的用戶(hù)

其他:full list of Sorted Set commands

Bitmaps and HyperLogLogs

Redis 同時(shí)也支持Bitmaps 和 HyperLogLogs,基于Strings實(shí)現(xiàn),但有他們自己的語(yǔ)義。

其他:introduction to Redis data types

推薦的redisdocs:

本文由 歧途老農(nóng) 創(chuàng)作,采用 CC BY 4.0 CN 協(xié)議 進(jìn)行許可。 可自由轉(zhuǎn)載、引用,但需署名作者且注明文章出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容