天天看點

《Redis官方文檔》Data types—資料類型

<b>string</b><b>類型(字元串類型)</b>

string 是redis中最基本的類型。redis中的string 類型是二進制安全的,也就是說在redis中string類型可以包含各種資料,比如一張jpeg圖檔或者是一個序列化的ruby對象。一個string類型的值最大長度可以是512m。

在redis中string有很多有趣的用法,比如:

<b>lists</b><b>類型(清單類型)</b>

redis的清單類型中存儲一系列string值,這些string按照插入的順序排序。redis的list可以從頭部(左側)加入元素,也可以從尾部(右側)加入元素。

一些例子:

<code>1</code>

<code>lpush mylist a&amp;nbsp;&amp;nbsp; # 現在list是 "a"</code>

<code>2</code>

<code>lpush mylist b&amp;nbsp;&amp;nbsp; # 現在list是"b","a"</code>

<code>3</code>

<code>rpush mylist c&amp;nbsp;&amp;nbsp; # 現在list是 "b","a","c" (注意這次使用的是 rpush)</code>

list的最大長度是2^32 – 1個元素(4294967295,一個list中可以有多達40多億個元素)

從時間複雜度的角度來看,redis list類型的最大特性是:即使是在list的頭端或者尾端做百萬次的插入和删除操作,也能保持穩定的很少的時間消耗。在list的兩端通路元素是非常快的,但是如果要通路一個很大的list中的中間部分的元素就會比較慢了,時間複雜度是o(n)。

redis的lists類型有很多有趣的用法,比如:

<b>sets</b><b>類型(集合類型)</b>

redis的sets類型是string的無序集合。增加,删除,測試元素是否存在的時間複雜度都是o(1)(不管集合中有多少元素都是穩定的時間消耗)

redis sets的一個重要特性是不允許重複元素。向集合中添加多次相同的元素,集合中隻存在一個該元素。在實際應用中,這意味着在添加一個元素前不需要先檢查元素是否存在。

關于redis sets一個非常有意思的事情是,它們支援多個伺服器端指令來從現有集合開始計算集合,是以執行集合的交集,并集,差集都可以很快。

set的最大長度是2^32 – 1個元素(4294967295,一個set中可以有多達40多億個元素)

redis sets有很多有趣的用法,比如:

<b>hashes</b>(<b>哈希類型</b>)

redis hashes 儲存string域和string值之間的映射,是以它們是用來表示對象的絕佳資料類型(比如一個有着使用者名,密碼等屬性的user對象):

<code>@cli</code>

<code> </code><code>hmset user:1000 username antirez password p1pp0 age 34</code>

<code> </code><code>hgetall user:1000</code>

<code>4</code>

<code> </code><code>hset user:1000 password 12345</code>

<code>5</code>

一個有着少量資料域(這裡的少量大概100上下)的hash,其存儲方式占用很小的空間,是以在一個小的redis執行個體中就可以存儲上百萬的這種對象。

雖然hashes主要用于表示對象,他們可以存儲很多的元素,是以你可以使用hashes來做許多其他的工作。

hash的最大長度是2^32 – 1個域值對(4294967295,一個hash中可以有多達40多億個域值對)

<b>sorted sets</b> <b>類型(有序集合類型)</b>

redis有序集合類型與redis的集合類型類似,是非重複的string元素的集合。不同之處在于,有序集合中的每個成員都關聯一個score,score是在排序時候使用的,按照score的值從小到大進行排序。集合中每個元素是唯一的,但score有可能重複。

使用有序集合可以很高效的進行,添加,移除,更新元素的操作(時間消耗與元素個數的對數成比例)。由于元素在集合中的位置是有序的,使用get ranges by score或者by rank(位置)來順序擷取或者随機讀取效率都很高。(本句不确定,未完全了解原文意思,是根據自己對redis的淺顯了解進行的翻譯)通路有序集合中間部分的元素也非常快,是以可以把有序集合當做一個不允許重複元素的智能清單,你可以快速通路需要的一切:擷取有序元素,快速存在測試,快速通路中間的元素等等。

簡短來說,使用有序集合可以實作很多高性能的工作,這一點在其他資料庫是很難實作的。

使用有序集合你可以:

<b>bitmaps and hyperloglogs類型(位圖類型和hyperloglogs類型)</b>

redis 也支援位圖類型和hyperloglogs 類型,他們是在string基本類型基礎上建立的類型,但有自己的語義。