字符串是 Redis 最基本的數(shù)據(jù)類型。Redis 字符串是二進制安全的,也就是說,一個 Redis 字符串可以包含任意類型的數(shù)據(jù),例如一張 JPEG 圖像,或者一個序列化的 Ruby 對象。
一個字符串最大為 512M 字節(jié)。
你可以使用 Redis 的字符串類型做很多有意思的事情,例如,你可以:
后續(xù)我們會詳細介紹可用的字符串命令,也會詳細介紹 Redis 數(shù)據(jù)類型的更多高級信息。
Redis 列表僅僅是按照插入順序排序的字符串列表??梢蕴砑右粋€元素到 Redis 列表的頭部 (左邊) 或者尾部 (右邊)。
LPUSH 命令用于插入一個元素到列表的頭部,RPUSH 命令用于插入一個元素到列表的尾部。當這兩個命令操作在一個不存在的鍵時,將會創(chuàng)建一個新的列表。同樣,如果一個操作會清空列表,那么該鍵將會從鍵空間 (key space) 移除。這些是非常方便的語義,因為列表命令如果使用不存在的鍵作為參數(shù),就會表現(xiàn)得像命令運行在一個空列表上一樣。
一些列表操作的例子結果:
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)
列表的最大長度是 223-1 個元素 (4294967295,超過 40 億個元素)。
從時間復雜度的角度看,Redis 列表主要的特性是支持以常量時間在列表的頭和尾附近插入和刪除元素,即使列表中已經(jīng)插入了上百萬的數(shù)據(jù)。訪問列表兩端的元素非常的快速,但是訪問一個非常大的列表的中間卻非常的慢,因為這是一個 O(N)時間復雜度的操作。
你可以使用 Redis 的列表類型做很多有意思的事情,例如,你可以:
后續(xù)我們會詳細介紹可用的列表命令,也會詳細介紹 Redis 數(shù)據(jù)類型的更多高級信息。
Redis 集合是沒有順序的字符串集合 (collection)??梢栽?O(1) 的時間復雜度添加、刪除和測試元素存在與否 (不管集合中有多少元素都是常量時間)。
Redis 集合具有你需要的不允許重復成員的性質(zhì)。多次加入同一個元素到集合也只會有一個拷貝在其中。實際上,這意味著加入一個元素到集合中并不需要檢查元素是否已存在。
Redis 集合非常有意思的是,支持很多服務器端的命令,可以在很短的時間內(nèi)和已經(jīng)存在的集合一起計算并集,交集和差集。
你可以使用 Redis 的集合類型做很多有意思的事情,例如,你可以:
后續(xù)我們會詳細介紹可用的集合命令,也會詳細介紹 Redis 數(shù)據(jù)類型的更多高級信息。
Redis 哈希是字符串字段 (field) 與字符串值之間的映射,所以是表示對象的理想數(shù)據(jù)類型 (例如:一個用戶對象有多個字段,像用戶名,姓氏,年齡等等):
@cli
HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000
擁有少量字段 (少量指的是大約 100) 的哈希會以占用很少存儲空間的方式存儲,所以你可以在一個很小的 Redis 實例里存儲數(shù)百萬的對象。
由于哈希主要用來表示對象,對象能存儲很多元素,所以你可以用哈希來做很多其他的事情。
每個哈??梢源鎯Χ噙_ 223-1 個字段值對 (field-value pair)(多于 40 億個)。
后續(xù)我們會詳細介紹可用的哈希命令,也會詳細介紹 Redis 數(shù)據(jù)類型的更多高級信息。
Redis 有序集合和 Redis 集合類似,是非重復字符串集合 (collection)。不同的是,每一個有序集合的成員都有一個關聯(lián)的分數(shù) (score),用于按照分數(shù)高低排序。盡管成員是唯一的,但是分數(shù)是可以重復的。
對有序集合我們可以通過很快速的方式添加,刪除和更新元素 (在和元素數(shù)量的對數(shù)成正比的時間內(nèi))。由于元素是有序的而無需事后排序,你可以通過分數(shù)或者排名 (位置) 很快地來獲取一個范圍內(nèi)的元素。訪問有序集合的中間元素也是很快的,所以你可以使用有序集合作為一個無重復元素,快速訪問你想要的一切的聰明列表:有序的元素,快速的存在性測試,快速的訪問中間元素!
總之,有序集合可以在很好的性能下,做很多別的數(shù)據(jù)庫無法模擬的事情。
使用有序集合你可以:
例如多人在線游戲排行榜,每次提交一個新的分數(shù),你就使用 ZADD 命令更新。你可以很容易地使用 ZRANGE 命令獲取前幾名用戶,你也可以用 ZRANK 命令,通過給定用戶名返回其排行。同時使用 ZRANK 和 ZRANGE 命令可以展示與給定用戶相似的用戶及其分數(shù)。以上這些操作都非常的快。
有序集合常用來索引存儲在 Redis 內(nèi)的數(shù)據(jù)。例如,假設你有很多表示用戶的哈希,你可以使用有序集合,用年齡作為元素的分數(shù),用用戶 ID 作為元素值,于是你就可以使用 ZRANGEBYSCORE 命令很快且輕而易舉地檢索出給定年齡區(qū)間的所有用戶了。
有序集合或許是最高級的 Redis 數(shù)據(jù)類型,后續(xù)我們會詳細介紹可用的有序集合命令,也會詳細介紹 Redis 數(shù)據(jù)類型的更多高級信息。
Redis 還支持位圖和超重對數(shù)這兩種基于字符串基本類型,但有自己語義的數(shù)據(jù)類型。
后續(xù)我們會詳細介紹這些數(shù)據(jù)類型的更多高級信息。