標籤:
一、.NET使用Redis
和MongoDB一樣,在.NET中使用Redis其實也是使用第三方驅動,官網推薦的是使用ServiceStack.Redis(https://github.com/ServiceStack/ServiceStack.Redis)
點擊下載壓縮包,解壓 ServiceStack.Redis-master.zip\ServiceStack.Redis-master\build\release\MonoDevelop 下的ServiceStack.Redis.zip 壓縮包會有4個dll,我們直接在項目中添加引用即可!
二、Redis資料類型
Redis目前提供五種資料類型:string(字串)、list(鏈表)、Hash(雜湊)、set(集合)及zset(sorted set) (有序集合)。
1、String類型
String是最常用的一種資料類型,普通的key/value儲存都可以歸為此類。一個Key對應一個Value,string類型是二進位安全的。Redis的string可以包含任何資料,比如jpg圖片(產生二進位)或者序列化的對象。
2、Hash類型
hash是一個string 類型的field和value的映射表。hash特別 適合儲存物件。相對於將對象的每個欄位存成單個string 類型。一個Object Storage Service在hash類型中會佔用更少的記憶體,並且可以更方便的存取整個對象。省記憶體的原因是建立一個hash對象時開始是用zipmap(又稱為small hash)來儲存的。這個zipmap其實並不是hash table,但是zipmap相比正常的hash實現可以節省不少hash本身需要的一些中繼資料存放區開銷。儘管zipmap的添加,刪除,尋找都是O(n),但是由於一般對象的field數量都不太多。所以使用zipmap也是很快的,也就是說添加刪除平均還是O(1)。如果field或者value的大小超出一定限制後,redis會在內部自動將zipmap替換成正常的hash實現. 這個限制可以在設定檔中指定。
如。Redis的Hash實際是內部儲存的Value為一個HashMap,這個HashMap的key是成員的屬性名稱,value是屬性值,這樣對資料的修改和存取都可以直接通過其內部HashMap的Key(Redis裡稱內部HashMap的key為field), 也就是通過key(使用者ID) + field(屬性標籤) 就可以操作對應屬性資料了。
3、List類型
list是一個鏈表結構,主要功能是push,pop,擷取一個範圍的所有的值等,操作中key理解為鏈表名字。 Redis的list類型其實就是一個每個子項目都是string類型的雙向鏈表。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素,這樣list既可以作為棧,又可以作為隊列。
Redis list的實現為一個雙向鏈表,即可以支援反向尋找和遍曆,更方便操作,不過帶來了部分額外的記憶體開銷,Redis內部的很多實現,包括髮送緩衝隊列等也都是用的這個資料結構。
4、Set類型
在Redis中,我們可以將Set類型看作為沒有排序的字元集合,和List類型一樣,我們也可以在該類型的資料值上執行添加、刪除或判斷某一元素是否存在等操作。需要說明的是,這些操作的時間複雜度為O(1),即常量時間內完成次操作。Set可包含的最大元素數量是4294967295。
和List類型不同的是,Set集合中不允許出現重複的元素,這一點和C++標準庫中的set容器是完全相同的。換句話說,如果多次添加相同元素,Set中將僅保留該元素的一份拷貝。和List類型相比,Set類型在功能上還存在著一個非常重要的特性,即在伺服器端完成多個Sets之間的彙總計算操作,如unions、intersections和differences。由於這些操作均在服務端完成,因此效率極高,而且也節省了大量的網路IO開銷。
5、Sorted Set類型
Sorted Set 是Set的一個升級版本,它在set的基礎上增加了一個順序的屬性,這一屬性在添加修改 .元素的時候可以指定,每次指定後,zset(表示有序集合)會自動重新按新的值調整順序。可以理解為有列的表,一列存 value,一列存順序。操作中key理解為zset的名字.
應用情境:
Redis sorted set的使用情境與set類似,區別是set不是自動有序的,而sorted set可以通過使用者額外提供一個優先順序(score)的參數來為成員排序,並且是插入有序的,即自動排序。當你需要一個有序的並且不重複的集合列表,那麼可以選擇sorted set資料結構。
Redis簡介四