Redis支援五種資料類型:string(字元串),hash(哈希),list(清單),set(集合)及zset(sorted set:有序集合)。
String(字元串)
string 是 redis 最基本的類型,你可以了解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。
string 類型是二進制安全的。意思是 redis 的 string 可以包含任何資料。比如jpg圖檔或者序列化的對象。
string 類型是 Redis 最基本的資料類型,string 類型的值最大能存儲 512MB。執行個體
redis 127.0.0.1:6379> SET name "redis"
OK
redis 127.0.0.1:6379> GET name
"redis"
在以上執行個體中我們使用了 Redis 的 SET 和 GET 指令。鍵為 name,對應的值為 redis。
注意:一個鍵最大能存儲512MB。
Hash(哈希)
Redis hash 是一個鍵值(key=>value)對集合。
Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特别适合用于存儲對象。
執行個體
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
執行個體中我們使用了 Redis HMSET, HGET 指令,HMSET 設定了兩個 field=>value 對, HGET 擷取對應 field 對應的 value。
每個 hash 可以存儲 232 -1 鍵值對(40多億)。
List(清單)
Redis 清單是簡單的字元串清單,按照插入順序排序。你可以添加一個元素到清單的頭部(左邊)或者尾部(右邊)。
redis 127.0.0.1:6379> lpush mykey redis
(integer) 1
redis 127.0.0.1:6379> lpush mykey mongodb
(integer) 2
redis 127.0.0.1:6379> lpush mykey rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange mykey 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
清單最多可存儲 232 - 1 元素 (4294967295, 每個清單可存儲40多億)。
Set(集合)
Redis的Set是string類型的無序集合。
集合是通過哈希表實作的,是以添加,删除,查找的複雜度都是O(1)。
sadd 指令
添加一個 string 元素到 key 對應的 set 集合中,成功傳回1,如果元素已經在集合中傳回 0,如果 key 對應的 set 不存在則傳回錯誤。
sadd key member
redis 127.0.0.1:6379> zadd mykey 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd mykey 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd mykey 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd mykey 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > ZRANGEBYSCORE mykey 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"
注意:以上執行個體中 rabitmq 添加了兩次,但根據集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成員數為 232 - 1(4294967295, 每個集合可存儲40多億個成員)。
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重複。
zadd 指令
添加元素到集合,元素在集合中存在則更新對應score
zadd key score member
redis 127.0.0.1:6379> zadd mykey 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd mykey 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd mykey 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd mykey 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > ZRANGEBYSCORE mykey 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"
各個資料類型應用場景:
類型 | 簡介 | 特性 | 場景 |
String(字元串) | 二進制安全 | 可以包含任何資料,比如jpg圖檔或者序列化的對象,一個鍵最大能存儲512M | --- |
Hash(字典) | 鍵值對集合,即程式設計語言中的Map類型 | 适合存儲對象,并且可以像資料庫中update一個屬性一樣隻修改某一項屬性值(Memcached中需要取出整個字元串反序列化成對象修改完再序列化存回去) | 存儲、讀取、修改使用者屬性 |
List(清單) | 連結清單(雙向連結清單) | 增删快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的時間線) 2,消息隊列 |
Set(集合) | 哈希表實作,元素不重複 | 1、添加、删除,查找的複雜度都是O(1) 2、為集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,統計通路網站的所有獨立ip 3、好友推薦時,根據tag求交集,大于某個門檻值就可以推薦 |
Sorted Set(有序集合) | 将Set中的元素增加一個權重參數score,元素按score有序排列 | 資料插入集合時,已經進行天然排序 | 1、排行榜 2、帶權重的消息隊列 |
參考:
https://www.yiibai.com/redis/redis_data_types.html http://www.redis.net.cn/tutorial/3505.html http://www.runoob.com/redis/redis-data-types.html