天天看點

redis學習筆記2:redis資料類型及使用場景Redis 資料類型

2.1 資料類型:

Redis 資料類型

Redis支援五種資料類型:string(字元串),hash(哈希),list(清單),set(集合)及zset(sorted set:有序集合)。

String(字元串)

string是redis最基本的類型,你可以了解成與Memcached一模一樣的類型,一個key對應一個value。

string類型是二進制安全的。意思是redis的string可以包含任何資料。比如jpg圖檔或者序列化的對象 。

string類型是Redis最基本的資料類型,一個鍵最大能存儲512MB。

redis學習筆記2:redis資料類型及使用場景Redis 資料類型

1、O(1)時間複雜度擷取字元串長度、未用長度、已用長度

2、預配置設定機制,減少記憶體再配置設定次數

3、惰性删除機制,字元串縮減長度後的空間不釋放,作為預配置設定保留

String在redis内部存儲預設就是一個字元串,被redisObject所引用,當遇到incr,decr等操作時會轉成數值型進行計算,此時redisObject的encoding字段為int。

指令:get/set

業務場景:

String是最常用的一種資料類型,普通的key/ value 存儲都可以歸為此類.

HASH

Redis hash 是一個鍵值(key=>value)對集合。

Redis hash是一個string類型的field和value的映射表,hash特别适合用于存儲對象。

可以将資料庫一條記錄或程式中一個對象轉換成hashmap存放在redis中。

業務場景:使用者有多個屬性,修改是存在修改一個屬性序列化反序列化整個對象,采用hash時:Key仍然是使用者ID, value是一個Map,這個Map的key是成員的屬性名,value是屬性值,這樣對資料的修改和存取都可以直接通過其内部Map的Key(Redis裡稱内部Map的key為field), 

指令:hget.hset

上面已經說到Redis Hash對應Value内部實際就是一個HashMap,實際這裡會有2種不同實作,這個Hash的成員比較少時Redis為了節省記憶體會采用類似一維數組的方式來緊湊存儲,而不會采用真正的HashMap結構,對應的value redisObject的encoding為zipmap,當成員數量增大時會自動轉成真正的HashMap,此時encoding為ht。

List(清單)

Redis 清單是簡單的字元串清單,按照插入順序排序。你可以添加一個元素到清單的頭部(左邊)或者尾部(右邊)。

業務場景:關注清單,粉絲清單。或者是一些常見的城市清單等

實作方式:Redis list的實作為一個雙向連結清單,即可以支援反向查找和周遊,更友善操作,不過帶來了部分額外的記憶體開銷,Redis内部的很多實作,包括發送緩沖隊列等也都是用的這個資料結構。

redis學習筆記2:redis資料類型及使用場景Redis 資料類型

指令:lpush,rpush,lpop,rpop,lrange等。

Set(集合)

Redis的Set是string類型的無序集合。

集合是通過哈希表實作的,是以添加,删除,查找的複雜度都是O(1)。

sadd 指令

添加一個string元素到,key對應的set集合中,成功傳回1,如果元素已經在集合中傳回0,key對應的set不存在傳回錯誤。

業務場景:

Set對外提供的功能與list類似,當需要存儲一個清單資料,又不希望出現重複資料時,可選用set。比如共同好友等。

實作方式:

set 的内部實作是一個 value永遠為null的HashMap,實際就是通過計算hash的方式來快速排重的,這也是set能提供判斷一個成員是否在集合内的原因。

指令:zadd,zrange,zrem,zcard等

zset(sorted set:有序集合)

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

zset的成員是唯一的,但分數(score)卻可以重複。

業務場景:根據時間排序的新聞清單等,閱讀排行榜

實作方式:edis sorted set的内部使用HashMap和跳躍表(SkipList)來保證資料的存儲和有序,HashMap裡放的是成員到score的映射,而跳躍表裡存放的是所有的成員,排序依據是HashMap裡存的score,使用跳躍表的結構可以獲得比較高的查找效率,并且在實作上比較簡單。

redis學習筆記2:redis資料類型及使用場景Redis 資料類型

參考:

https://www.cnblogs.com/mrhgw/p/6278619.html

http://www.runoob.com/redis/redis-data-types.html

繼續閱讀