《Redis官方文档》Data types—数据类型
String類型(字符串類型)
String 是Redis中最基本的類型。Redis中的String 類型是二進(jìn)制安全的,也就是說在Redis中String類型可以包含各種數(shù)據(jù),比如一張JPEG圖片或者是一個(gè)序列化的Ruby對(duì)象。一個(gè)String類型的值最大長(zhǎng)度可以是512M。
在Redis中String有很多有趣的用法,比如:
- 把String當(dāng)做原子計(jì)數(shù)器,這可以使用INCR家族中的命令來實(shí)現(xiàn):INCR,?DECR,?INCRBY。
- 使用APPEND命令來給一個(gè)String追加內(nèi)容。
- 把String當(dāng)做一個(gè)隨機(jī)訪問的向量(Vector),這可以使用GETRANGE和?SETRANGE命令來實(shí)現(xiàn)
- 使用GETBIT?和SETBIT方法,在一個(gè)很小的空間中編碼大量的數(shù)據(jù),或者創(chuàng)建一個(gè)基于Redis的Bloom Filter 算法。
查看String類型可用命令來獲得更多信息,或者閱讀Redis數(shù)據(jù)類型介紹一章。
?
Lists類型(列表類型)
Redis的列表類型中存儲(chǔ)一系列String值,這些String按照插入的順序排序。Redis的List可以從頭部(左側(cè))加入元素,也可以從尾部(右側(cè))加入元素。
LPUSH?命令是在頭部加入一個(gè)新元素,RPUSH?命令是在尾部加入一個(gè)新元素。當(dāng)在一個(gè)空的鍵值(key)上執(zhí)行這些操作時(shí)會(huì)創(chuàng)建一個(gè)新的列表。類似的,當(dāng)一個(gè)操作清空了一個(gè)list時(shí),這個(gè)list對(duì)應(yīng)的key會(huì)被刪除。這非常好理解,因?yàn)閺拿畹拿志涂梢钥闯鲞@個(gè)命令是做什么操作的。如果使用一個(gè)不存在的key調(diào)用的話就會(huì)使用一個(gè)空的list。
一些例子:
| 1 | LPUSH mylist a # 現(xiàn)在list是 "a" |
| 2 | LPUSH mylist b # 現(xiàn)在list是"b","a" |
| 3 | RPUSH mylist c # 現(xiàn)在list是 "b","a","c" (注意這次使用的是 RPUSH) |
list的最大長(zhǎng)度是2^32 – 1個(gè)元素(4294967295,一個(gè)list中可以有多達(dá)40多億個(gè)元素)
從時(shí)間復(fù)雜度的角度來看,Redis list類型的最大特性是:即使是在list的頭端或者尾端做百萬次的插入和刪除操作,也能保持穩(wěn)定的很少的時(shí)間消耗。在list的兩端訪問元素是非常快的,但是如果要訪問一個(gè)很大的list中的中間部分的元素就會(huì)比較慢了,時(shí)間復(fù)雜度是O(N)。
Redis的Lists類型有很多有趣的用法,比如:
- 在社交網(wǎng)絡(luò)中使用List進(jìn)行時(shí)間表建模,使用LPUSH命令在用戶時(shí)間線中加入新的元素,然后使用LRANGE?命令來獲得最近加入的元素。
- 可以把LPUSH?和LTRIM?命令結(jié)合使用來實(shí)現(xiàn)定長(zhǎng)的列表,列表中只保存最近的N個(gè)元素
- 在創(chuàng)建后臺(tái)運(yùn)行的工作時(shí),Lists可以作為消息傳遞原語,例如著名的Ruby庫(kù)?Resque
- 還有很多可以使用lists來做的事,這種數(shù)據(jù)類型支持很多命令,包括像BLPOP這樣的阻塞命令
請(qǐng)查看lists類型可用命令來獲得更多的信息,或者閱讀Redis數(shù)據(jù)類型介紹一章
Sets類型(集合類型)
Redis的Sets類型是String的無序集合。增加,刪除,測(cè)試元素是否存在的時(shí)間復(fù)雜度都是O(1)(不管集合中有多少元素都是穩(wěn)定的時(shí)間消耗)
Redis Sets的一個(gè)重要特性是不允許重復(fù)元素。向集合中添加多次相同的元素,集合中只存在一個(gè)該元素。在實(shí)際應(yīng)用中,這意味著在添加一個(gè)元素前不需要先檢查元素是否存在。
關(guān)于Redis Sets一個(gè)非常有意思的事情是,它們支持多個(gè)服務(wù)器端命令來從現(xiàn)有集合開始計(jì)算集合,所以執(zhí)行集合的交集,并集,差集都可以很快。
set的最大長(zhǎng)度是2^32 – 1個(gè)元素(4294967295,一個(gè)set中可以有多達(dá)40多億個(gè)元素)
Redis Sets有很多有趣的用法,比如:
- 你可以使用Redis Sets來記錄唯一的事物,比如,你想知道訪問某個(gè)博客的IP地址,不要重復(fù)的IP,這種情況只需要在每次處理一個(gè)請(qǐng)求時(shí)簡(jiǎn)單的使用SADD命令就可以了,可以確信不會(huì)插入重復(fù)的IP.
- Redis Sets 可以很好的表示關(guān)系。你可以使用Redis創(chuàng)建一個(gè)標(biāo)簽系統(tǒng),每個(gè)標(biāo)簽使用一個(gè)Set來表示。然后你可以使用SADD?命令把具有特定標(biāo)簽的所有對(duì)象的所有ID放在表示這個(gè)標(biāo)簽的Set中。如果你想要知道同時(shí)擁有三個(gè)不同標(biāo)簽的對(duì)象,那么使用SINTER命令就好了。
- 你可以使用SPOP?或者?SRANDMEMBER?命令從集合中隨機(jī)的提取元素。
查看Set可用命令獲得更多信息,或者閱讀Redis數(shù)據(jù)類型介紹一章
Hashes(哈希類型)
Redis Hashes 保存String域和String值之間的映射,所以它們是用來表示對(duì)象的絕佳數(shù)據(jù)類型(比如一個(gè)有著用戶名,密碼等屬性的User對(duì)象):
| 1 | @cli |
| 2 | ?HMSET user:1000 username antirez password P1pp0 age 34 |
| 3 | ?HGETALL user:1000 |
| 4 | ?HSET user:1000 password 12345 |
| 5 | ?HGETALL user:1000 |
一個(gè)有著少量數(shù)據(jù)域(這里的少量大概100上下)的hash,其存儲(chǔ)方式占用很小的空間,所以在一個(gè)小的Redis實(shí)例中就可以存儲(chǔ)上百萬的這種對(duì)象。
雖然Hashes主要用于表示對(duì)象,他們可以存儲(chǔ)很多的元素,所以你可以使用Hashes來做許多其他的工作。
Hash的最大長(zhǎng)度是2^32 – 1個(gè)域值對(duì)(4294967295,一個(gè)Hash中可以有多達(dá)40多億個(gè)域值對(duì))
查看Hash類型可用命令來獲得更多信息,或者閱讀Redis數(shù)據(jù)類型介紹一章
Sorted sets?類型(有序集合類型)
Redis有序集合類型與Redis的集合類型類似,是非重復(fù)的String元素的集合。不同之處在于,有序集合中的每個(gè)成員都關(guān)聯(lián)一個(gè)Score,Score是在排序時(shí)候使用的,按照Score的值從小到大進(jìn)行排序。集合中每個(gè)元素是唯一的,但Score有可能重復(fù)。
使用有序集合可以很高效的進(jìn)行,添加,移除,更新元素的操作(時(shí)間消耗與元素個(gè)數(shù)的對(duì)數(shù)成比例)。由于元素在集合中的位置是有序的,使用get ranges by score或者by rank(位置)來順序獲取或者隨機(jī)讀取效率都很高。(本句不確定,未完全理解原文意思,是根據(jù)自己對(duì)Redis的淺顯理解進(jìn)行的翻譯)訪問有序集合中間部分的元素也非常快,所以可以把有序集合當(dāng)做一個(gè)不允許重復(fù)元素的智能列表,你可以快速訪問需要的一切:獲取有序元素,快速存在測(cè)試,快速訪問中間的元素等等。
簡(jiǎn)短來說,使用有序集合可以實(shí)現(xiàn)很多高性能的工作,這一點(diǎn)在其他數(shù)據(jù)庫(kù)是很難實(shí)現(xiàn)的。
使用有序集合你可以:
- 在大型在線游戲中創(chuàng)建一個(gè)排行榜,每次有新的成績(jī)提交,使用ZADD命令加入到有序集合中。可以使用ZRANGE命令輕松獲得成績(jī)名列前茅的玩家,你也可以使用ZRANK根據(jù)一個(gè)用戶名獲得該用戶的分?jǐn)?shù)排名。把ZRANK 和 ZRANGE結(jié)合使用你可以獲得與某個(gè)指定用戶分?jǐn)?shù)接近的其他用戶。這些操作都很高效。
- 有序集合經(jīng)常被用來索引存儲(chǔ)在Redis中的數(shù)據(jù)。比如,如果你有很多用戶,用Hash來表示,可以使用有序集合來為這些用戶創(chuàng)建索引,使用年齡作為Score,使用用戶的ID作為Value,這樣的話使用ZRANGEBYSCORE?命令可以輕松和快速的獲得某一年齡段的用戶。
有序集合可能是Redis中最高級(jí)的數(shù)據(jù)類型了,所以請(qǐng)花一些時(shí)間查看一下?有序集合命令列表?來獲得更多信息,同時(shí)你可能也想閱讀Redis數(shù)據(jù)類型介紹
Bitmaps and HyperLogLogs類型(位圖類型和HyperLogLogs類型)
Redis 也支持位圖類型和HyperLogLogs 類型,他們是在String基本類型基礎(chǔ)上建立的類型,但有自己的語義。
請(qǐng)參考Redis數(shù)據(jù)類型介紹?獲得這些類型的信息。
- 轉(zhuǎn)載自?并發(fā)編程網(wǎng) - ifeve.com
總結(jié)
以上是生活随笔為你收集整理的《Redis官方文档》Data types—数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easy bootstrap模板
- 下一篇: 常用工具说明--mongodb、mysq