簡(jiǎn)單介紹一下redis的幾種數(shù)據(jù)類(lèi)型: Strings,Lists奕剃,Sets衷旅, Hashe,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
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í)間線,使用 LPUSH 增加元素撮抓,而使用LRANGE獲取最新插入的幾個(gè)元素
- 使用 LPUSH 和 LTRIM 創(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的訪問(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è)在線游戲的選手積分榜耙箍,使用ZADD來(lái)增加一個(gè)新的記錄撰糠,使用 ZRANGE 獲取前幾名的選手,也可以使用 ZRANGE來(lái)獲取一個(gè)選手的排名辩昆。使用ZRANK 和 ZRANGE可以吃很快查詢到一個(gè)元素附近的幾個(gè)元素
- Sorted Sets常常被用來(lái)做作redis中的索引數(shù)據(jù)阅酪,比如有很多用戶的hash數(shù)據(jù),可以使用用戶的年齡作為分值汁针,用戶id作為值术辐,使用ZRANGEBYSCORE就可以吃很快查詢出一個(gè)年齡區(qū)間內(nèi)的用戶
其他: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)載较屿、引用,但需署名作者且注明文章出處卓练。