字符串是一種最基本的Redis值類型。Redis字符串是二進制安全的,這意味着一個Redis字符串能包含任意類型的數據,例如: 一張JPEG格式的圖片或者一個序列化的Ruby對象。git
一個字符串類型的值最多能存儲512M字節的內容。github
你能夠用Redis字符串作許多有趣的事,例如你能夠:web
使用APPEND命令在字符串後添加內容。數據庫
查看全部可用的字符串命令獲取更多信息。app
Redis列表是簡單的字符串列表,按照插入順序排序。 你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)。測試
LPUSH命令插入一個新元素到列表頭部,而RPUSH命令 插入一個新元素到列表的尾部。當 對一個空key執行其中某個命令時,將會建立一個新表。 相似的,若是一個操做要清空列表,那麼key會從對應的key空間刪除。這是個很是便利的語義, 由於若是使用一個不存在的key做爲參數,全部的列表命令都會像在對一個空表操做同樣。this
一些列表操做及其結果:
LPUSH mylist a # now the list is "a" LPUSH mylist b # now the list is "b","a" RPUSH mylist c # now the list is "b","a","c" (RPUSH was used this time)
一個列表最多能夠包含232-1個元素(4294967295,每一個表超過40億個元素)。
從時間複雜度的角度來看,Redis列表主要的特性就是支持時間常數的 插入和靠近頭尾部元素的刪除,即便是須要插入上百萬的條目。 訪問列表兩端的元素是很是快的,但若是你試着訪問一個很是大 的列表的中間元素仍然是十分慢的,由於那是一個時間複雜度爲 O(N) 的操做。
你能夠用Redis列表作許多有趣的事,例如你能夠:
列表能夠用來看成消息傳遞的基元(primitive),例如,衆所周知的用來建立後臺任務的Resque Ruby庫。
你可使用列表作更多事,這個數據類型支持許多命令,包括像BLPOP這樣的阻塞命令。請查看全部可用的列表操做命令獲取更多的信息。
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命令隨機地獲取元素。
查看完整的集合命令列表獲取更多的信息。
Redis Hashes是字符串字段和字符串值之間的映射,因此它們是完美的表示對象(eg:一個有名,姓,年齡等屬性的用戶)的數據類型。
redis> HMSET user:1000 username antirez password P1pp0 age 34
OK
redis> HGETALL user:1000
1) "username" 2) "antirez" 3) "password" 4) "P1pp0" 5) "age" 6) "34"
redis> HSET user:1000 password 12345
(integer) 0
redis> HGETALL user:1000
1) "username" 2) "antirez" 3) "password" 4) "12345" 5) "age" 6) "34"
redis>
一個擁有少許(100個左右)字段的hash須要 不多的空間來存儲,全部你能夠在一個小型的 Redis實例中存儲上百萬的對象。
儘管Hashes主要用來表示對象,但它們也可以存儲許多元素,因此你也能夠用Hashes來完成許多其餘的任務。
一個hash最多能夠包含232-1 字段-值對(超過40億)。
查看完整的Hash命令列表獲取更多信息。
Redis有序集合和Redis集合相似,是不包含 相同字符串的合集。它們的差異是,每一個有序集合 的成員都關聯着一個評分,這個評分用於把有序集 閤中的成員按最低分到最高分排列。
使用有序集合,你能夠很是快地(O(log(N)))完成添加,刪除和更新元素的操做。 由於元素是在插入時就排好序的,因此很快地經過評分(score)或者 位次(position)得到一個範圍的元素。 訪問有序集合的中間元素一樣也是很是快的,所以你可使用有序集合做爲一個沒用重複成員的智能列表。 在這個列表中, 你能夠輕易地訪問任何你須要的東西: 有序的元素,快速的存在性測試,快速訪問集合中間元素!
簡而言之,使用有序集合你能夠很好地完成 不少在其餘數據庫中難以實現的任務。
使用有序集合你能夠:
在一個巨型在線遊戲中創建一個排行榜,每當有新的記錄產生時,使用ZADD 來更新它。你能夠用ZRANGE輕鬆地獲取排名靠前的用戶, 你也能夠提供一個用戶名,而後用ZRANK獲取他在排行榜中的名次。 同時使用ZRANK和ZRANGE你能夠得到與指定用戶有相同分數的用戶名單。 全部這些操做都很是迅速。
有序集合一般用來索引存儲在Redis中的數據。 例如:若是你有不少的hash來表示用戶,那麼你可使用一個有序集合,這個集合的年齡字段用來看成評分,用戶ID看成值。用ZRANGEBYSCORE能夠簡單快速地檢索到給定年齡段的全部用戶。
有序集合或許是最高級的Redis數據類型,因此花些時間查看完整的有序集合命令列表去探索你能用Redis幹些什麼吧!