天天看點

資料類型(Data Types)

字元串是一種最基本的Redis值類型。Redis字元串是二進制安全的,這意味着一個Redis字元串能包含任意類型的資料,例如: 一張JPEG格式的圖檔或者一個序列化的Ruby對象。

一個字元串類型的值最多能存儲512M位元組的内容。

你可以用Redis字元串做許多有趣的事,例如你可以:

利用INCR指令簇(INCR, DECR, INCRBY)來把字元串當作原子計數器使用。

使用APPEND指令在字元串後添加内容。

将字元串作為GETRANGE 和 SETRANGE的随機通路向量。

在小空間裡編碼大量資料,或者使用 GETBIT 和 SETBIT建立一個Redis支援的Bloom過濾器。

檢視所有可用的字元串指令擷取更多資訊, 或者進一步閱讀 Redis資料類型介紹.

Redis清單是簡單的字元串清單,按照插入順序排序。 你可以添加一個元素到清單的頭部(左邊)或者尾部(右邊)。

LPUSH 指令插入一個新元素到清單頭部,而RPUSH指令 插入一個新元素到清單的尾部。當 對一個空key執行其中某個指令時,将會建立一個新表。 類似的,如果一個操作要清空清單,那麼key會從對應的key空間删除。這是個非常便利的語義, 因為如果使用一個不存在的key作為參數,所有的清單指令都會像在對一個空表操作一樣。

一些清單操作及其結果:

一個清單最多可以包含232-1個元素(4294967295,每個表超過40億個元素)。

從時間複雜度的角度來看,Redis清單主要的特性就是支援時間常數的 插入和靠近頭尾部元素的删除,即使是需要插入上百萬的條目。 通路清單兩端的元素是非常快的,但如果你試着通路一個非常大 的清單的中間元素仍然是十分慢的,因為那是一個時間複雜度為 O(N) 的操作。

你可以用Redis清單做許多有趣的事,例如你可以:

在社交網絡中建立一個時間線模型,使用LPUSH去添加新的元素到使用者時間線中,使用LRANGE去檢索一些最近插入的條目。

你可以同時使用LPUSH和LTRIM去建立一個永遠不會超過指定元素數目的清單并同時記住最後的N個元素。

清單可以用來當作消息傳遞的基元(primitive),例如,衆所周知的用來建立背景任務的Resque Ruby庫。

你可以使用清單做更多事,這個資料類型支援許多指令,包括像BLPOP這樣的阻塞指令。請檢視所有可用的清單操作指令擷取更多的資訊。

檢視完整的 清單(Lists) 擷取更多資訊, 或者進一步閱讀 Redis資料類型介紹.

Redis集合是一個無序的字元串合集。你可以以O(1) 的時間複雜度(無論集合中有多少元素時間複雜度都為常量)完成 添加,删除以及測試元素是否存在的操作。

Redis集合有着不允許相同成員存在的優秀特性。向集合中多次添加同一進制素,在集合中最終隻會存在一個此元素。實際上這就意味着,在添加元素前,你并不需要事先進行檢驗此元素是否已經存在的操作。

一個Redis清單十分有趣的事是,它們支援一些服務端的指令從現有的集合出發去進行集合運算。 是以你可以在很短的時間内完成合并(union),求交(intersection), 找出不同元素的操作。

一個集合最多可以包含232-1個元素(4294967295,每個集合超過40億個元素)。

你可以用Redis集合做很多有趣的事,例如你可以:

用集合跟蹤一個獨特的事。想要知道所有通路某個部落格文章的獨立IP?隻要每次都用SADD來處理一個頁面通路。那麼你可以肯定重複的IP是不會插入的。

Redis集合能很好的表示關系。你可以建立一個tagging系統,然後用集合來代表單個tag。接下來你可以用SADD指令把所有擁有tag的對象的所有ID添加進集合,這樣來表示這個特定的tag。如果你想要同時有3個不同tag的所有對象的所有ID,那麼你需要使用SINTER.

使用SPOP或者SRANDMEMBER指令随機地擷取元素。

檢視完整的 集合(Sets) 擷取更多資訊, 或者進一步閱讀 Redis資料類型介紹.

Redis Hashes是字元串字段和字元串值之間的映射,是以它們是完美的表示對象(eg:一個有名,姓,年齡等屬性的使用者)的資料類型。

一個擁有少量(100個左右)字段的hash需要 很少的空間來存儲,所有你可以在一個小型的 Redis執行個體中存儲上百萬的對象。

盡管Hashes主要用來表示對象,但它們也能夠存儲許多元素,是以你也可以用Hashes來完成許多其他的任務。

一個hash最多可以包含232-1 個key-value鍵值對(超過40億)。

檢視完整的 哈希(Hashes) 擷取更多資訊, 或者進一步閱讀 Redis資料類型介紹.

Redis有序集合和Redis集合類似,是不包含 相同字元串的合集。它們的差别是,每個有序集合 的成員都關聯着一個評分,這個評分用于把有序集 合中的成員按最低分到最高分排列。

使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。 因為元素是在插入時就排好序的,是以很快地通過評分(score)或者 位次(position)獲得一個範圍的元素。 通路有序集合的中間元素同樣也是非常快的,是以你可以使用有序集合作為一個沒用重複成員的智能清單。 在這個清單中, 你可以輕易地通路任何你需要的東西: 有序的元素,快速的存在性測試,快速通路集合中間元素!

簡而言之,使用有序集合你可以很好地完成 很多在其他資料庫中難以實作的任務。

使用有序集合你可以:

在一個巨型線上遊戲中建立一個排行榜,每當有新的記錄産生時,使用ZADD 來更新它。你可以用ZRANGE輕松地擷取排名靠前的使用者, 你也可以提供一個使用者名,然後用ZRANK擷取他在排行榜中的名次。 同時使用ZRANK和ZRANGE你可以獲得與指定使用者有相同分數的使用者名單。 所有這些操作都非常迅速。

有序集合通常用來索引存儲在Redis中的資料。 例如:如果你有很多的hash來表示使用者,那麼你可以使用一個有序集合,這個集合的年齡字段用來當作評分,使用者ID當作值。用ZRANGEBYSCORE可以簡單快速地檢索到給定年齡段的所有使用者。

有序集合或許是最進階的Redis資料類型,是以花些時間檢視完整的有序集合(Sorted sets)指令清單去探索你能用Redis幹些什麼吧!

Redis 同樣支援 Bitmaps 和 HyperLogLogs 資料類型,實際上是基于字元串的基本類型的資料類型,但有自己的語義。

檢視詳細Redis資料類型介紹.

本文作者:陳群

本文來自雲栖社群合作夥伴rediscn,了解相關資訊可以關注redis.cn網站。