Redis資料類型

來源:互聯網
上載者:User

該文章是對Redis官方文檔的翻譯

字串(Strings)

字串是Redis值的最基礎的類型。Redis字串是二進位安全的,這意味著一個Redis字串可以包含任何種類的資料,例如一個JPEG映像或者一個序列化的Ruby對象。 一個字串值最多可以儲存512M位元組的內容。 你可以使用Redis的字串做一些有趣的事情,例如你可以:

  • 在使用命令INCR系列( INCR, DECR, INCRBY)命令時將字串作為的原子計數器。
  • 使用APPEND命令追加字串。
  • 將字串作為GETRANGE 和 SETRANGE的隨機訪問向量。
  • 在小空間裡編碼大量資料, 或者使用 GETBIT 和 SETBIT建立一個Redis支援的Bloom過濾器。

 查看可用的字串命令獲得更多資訊

列表(Lists)

Redis列表是簡單的字串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊) LPUSH 命令插入一個新的元素導頭部, 而 RPUSH插入一個新元素導尾部.當一個這兩個操作在一個空的Key上被執行的時候一個新的列表被建立。相似的,如果一個列表操作清空一個列表那麼對應的key將被從key空間刪除。這是非常方便的語義,因為他們被調用使用一個空列表完全就像他們被調用時使用一個不存在的索引值(可以)做為參數。 一些類表操作和結果的例子:

LPUSH mylist a   # 現在類表中是 "a"

LPUSH mylist b   # 現在列表中是 "b","a"

RPUSH mylist c   # 現在類表中是 "b","a","c" (這次RPUSH被使用)

一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。 從時間複雜度的角度來看Redis列表的主要特徵是在頭和尾的元素插入和刪除是固定時間,即便是數以百萬計的插入。. 在列表的兩端訪問元素是非常快的但是如果你試著訪問一個非常大的列表的中間的元素是很慢的,因為那是一個O(N)操作。 你可以用Redis列表做很多有趣的事情,比如你可以:

  • 在一個社交網路中建立一個時間軸模型,使用LPUSH 去添加新的元素到使用者的時間軸, 使用LRANGE去接收一些最近插入的元素。
  • 你可以將 LPUSH 和 LTRIM 一起用去建立一個永遠也不會超過指定元素數目的列表,但是記住是最後的N個元素。
  • 列表能夠被用來作為訊息傳遞primitive[譯註:不清楚表達的意思], 例如眾所周知的用來建立後台工作的Resque Ruby庫.
  • 你可以使用列表做更多的事,這個資料類型支援許多命令,包括像BLPOP這樣的阻塞命令。請查看 可獲得的列表操作命令 以獲得更多的資訊。

集合(Sets)

Redis 集合(Set)是一個無序的字串集合. 你可以以O(1)的時間複雜度 (無論集合中有多少元素時間複雜度都是常量)完成添加,刪除,以及測試元素是否存在。 Redis 集合擁有令人滿意的不允許包含相同成員的屬性。多次添加相同的元素,最終在集合裡只會有一個元素。 實際上說這些就是意味著在添加元素的時候無須檢測元素是否存在。 一個Redis集合的非常有趣的事情是他支援一些服務端的命令從現有的集合出發去進行集合運算,因此你可以在非常短的時間內進行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。 一個集合最多可以包含 232 - 1 個元素(4294967295, 每個集合超過40一個元素). 你可以使用集合多很多有趣的事情,比如你能夠:

  • 你可以使用集合追蹤一件(獨一無二的)事情,想要知道所有訪問一個部落格文章的獨立IP? 每次當你處理一個頁面訪問的事簡單的使用SADD。你可以肯定重複的IP是不會被插入的。
  • Redis 集合是很擅長表現關係的。你可以使用Redis集合建立一個tagging系統去表現每一個tag。接下來你能夠使用SADD命令將有一個給定tag的所有對象的所有ID添加到一個用來展現這個特定tag的集合裡。你想要同時有三個不同tag的所有對象的ID嗎?使用SINTER就好了。
  •  使用 SPOP 或者 SRANDMEMBER 命令你可以使用集合去隨意的抽取元素。
  •  查看 完整的集合命令列表 以獲得更多的資訊。 

雜湊(Hashes)

Redis Hashes是字串欄位和字串值之間的映射,因此他們是展現對象的完美資料類型。 (例如:一個有名,姓,年齡等等屬性的使用者):

@cli

HMSET user:1000 username antirez password P1pp0 age 34

HGETALL user:1000

HSET user:1000 password 12345

HGETALL user:1000

一個帶有一些欄位(這裡的一些意味著高達一百左右)的hash僅僅需要一塊很小的空間儲存,因此你可以儲存數以百萬計的對象在一個小的Redis執行個體中。 雜湊主要用來表現對象,他們有能力儲存很多個物件,因此你可以將雜湊用於許多其他的任務。 每一個雜湊可以儲存超過232 - 1 欄位-值 對 (超過40億). 查看 完整的雜湊命令列表 以獲得更多的資訊。

有序集合(Sorted Sets)

Redis有序集合與普通集合非常相似,是一個沒有重複元素的字串集合。不同之處是有序集合的沒有成員都關聯了一個評分,這個評分被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重複了。 使用有序集合你可以以非常快的速度(O(log(N)))添加,刪除和更新元素。因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來擷取一個範圍的元素。訪問有序集合的中間元素也是非常快的,因此你能夠使用有序集合作為一個沒有重複成員的智能列表。在有序集合中,你可以很快捷的訪問一切你需要的東西:有序的元素,快速的存在性測試,快速存取集合的中間元素! 簡而言之使用有序集合你可以做完成許多對效能有極端要求的任務,而那些任務使用其他類型的資料庫真的是很難完成的。 使用有序集合你可以:

  • 在一個大型的線上遊戲中展示一個熱門排行榜,在那裡一旦一個新的分數被提交,你可以使用ZADD命令去更新它.你也可用使用 ZRANGE命令來得到頂級的使用者,你還可以使用ZRANK命令根據使用者名稱返回該使用者在熱門排行榜中的位次。同時使用ZRANK 和 ZRANGE 你可以顯示和給定使用者分數相同的所有使用者。所有這些操作都非常的快速。
  • 有序集合常常被用來索引儲存在Redis中的資料。舉個例子,如果你有許多的雜湊(Hashes)來代表使用者,你可以使用一個有序集合,這個集合中的元素的年齡欄位被用來當做評分,而ID作為值。因此,使用 ZRANGEBYSCORE 命令,那是微不足道的並且能夠很快的接收到給定年齡段的所有使用者。
  • 有序集合或許是最進階的Redis資料類型,因此花點時間查看 完整的有序集合命令列表 去發現你能用Redis做些什麼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.