Redis知識點(二)

五種數據類型

首先 Redis 內部使用一個 redisObject 對象來表示全部的 key 和 value。redis

redisObject 最主要的信息如上圖所示:type 表示一個 value 對象具體是何種數據類型,encoding 是不一樣數據類型在 Redis 內部的存儲方式。安全

好比:type=string 表示 value 存儲的是一個普通字符串,那麼 encoding 能夠是 raw 或者 int。數據結構

①String 是 Redis 最基本的類型,能夠理解成與 Memcached如出一轍的類型,一個 Key 對應一個 Value。Value 不只是 String,也能夠是數字。3d

String 類型是二進制安全的,意思是 Redis 的 String 類型能夠包含任何數據,好比 jpg 圖片或者序列化的對象。String 類型的值最大能存儲 512M。code

②Hash是一個鍵值(key-value)的集合。Redis 的 Hash 是一個 String 的 Key 和 Value 的映射表,Hash 特別適合存儲對象。經常使用命令:hget,hset,hgetall 等。對象

③List 列表是簡單的字符串列表,按照插入順序排序。能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊) 經常使用命令:lpush、rpush、lpop、rpop、lrange(獲取列表片斷)等。blog

應用場景:List 應用場景很是多,也是 Redis 最重要的數據結構之一,好比 Twitter 的關注列表,粉絲列表均可以用 List 結構來實現。排序

數據結構:List 就是鏈表,能夠用來當消息隊列用。Redis 提供了 List 的 Push 和 Pop 操做,還提供了操做某一段的 API,能夠直接查詢或者刪除某一段的元素。隊列

實現方式:Redis List 的是實現是一個雙向鏈表,既能夠支持反向查找和遍歷,更方便操做,不過帶來了額外的內存開銷。圖片

④Set 是 String 類型的無序集合。集合是經過 hashtable 實現的。Set 中的元素是沒有順序的,並且是沒有重複的。經常使用命令:sdd、spop、smembers、sunion 等。

應用場景:Redis Set 對外提供的功能和 List 同樣是一個列表,特殊之處在於 Set 是自動去重的,並且 Set 提供了判斷某個成員是否在一個 Set 集合中。

⑤Zset 和 Set 同樣是 String 類型元素的集合,且不容許重複的元素。經常使用命令:zadd、zrange、zrem、zcard 等。

使用場景:Sorted Set 能夠經過用戶額外提供一個優先級(score)的參數來爲成員排序,而且是插入有序的,即自動排序。

當你須要一個有序的而且不重複的集合列表,那麼能夠選擇 Sorted Set 結構。

和 Set 相比,Sorted Set關聯了一個 Double 類型權重的參數 Score,使得集合中的元素可以按照 Score 進行有序排列,Redis 正是經過分數來爲集合中的成員進行從小到大的排序。

實現方式:Redis Sorted Set 的內部使用 HashMap 和跳躍表(skipList)來保證數據的存儲和有序,HashMap 裏放的是成員到 Score 的映射。

而跳躍表裏存放的是全部的成員,排序依據是 HashMap 裏存的 Score,使用跳躍表的結構能夠得到比較高的查找效率,而且在實現上比較簡單。

相關文章
相關標籤/搜索