在Redis中,咱們能夠將Set類型看做爲沒有排序的字符集合,和List類型同樣,咱們也能夠在該類型的數據值上執行添加、刪除或判斷某一元素是否存在等操做。須要說明的是,這些操做的時間複雜度爲O(1),即常量時間內完成次操做。Set可包含的最大元素數量是4294967295。
和List類型不一樣的是,Set集合中不容許出現重複的元素,這一點和C++標準庫中的set容器是徹底相同的。換句話說,若是屢次添加相同元素,Set中將僅保留該元素的一份拷貝。和List類型相比,Set類型在功能上還存在着一個很是重要的特性,即在服務器端完成多個Sets之間的聚合計算操做,如unions、intersections和differences。因爲這些操做均在服務端完成,所以效率極高,並且也節省了大量的網絡IO開銷。(參考:http://www.cnblogs.com/stephen-liu74/archive/2012/02/15/2352512.html)html
Redis作緩存Set可能到的的比較多(一家之言,歡迎拍磚)redis
打開redis服務器:緩存
打開redis客戶端:服務器
這就是一個set集合!網絡
至於redisset的命令小夥伴們能夠參考(http://redisdoc.com)數據結構
下面分享redis在.net中的使用方法spa
, 1,得到集合.net
1 // 獲取sortset表中setId中的全部keys,倒序獲取 2 public List<string> GetAllItemsFromSortedSetDesc(string setId) 3 { 4 List<string> result = ExecuteCommand<List<string>>(client => 5 { 6 return client.GetAllItemsFromSortedSetDesc(setId); 7 }); 8 return result; 9 } 10 11 12 public List<string> GetAllItemsFromSortedSet(string setId) 13 { 14 List<string> result = ExecuteCommand<List<string>>(client => 15 { 16 return client.GetAllItemsFromSortedSet(setId); 17 }); 18 return result; 19 } 20 21 22 // 獲取sortset表中setId中的全部keys,values 23 public IDictionary<string, double> GetAllWithScoresFromSortedSet(string setId) 24 { 25 IDictionary<string, double> result = ExecuteCommand<IDictionary<string, double>>(client => 26 { 27 return client.GetAllWithScoresFromSortedSet(setId); 28 //return client.GetFromHash<Dictionary<string, string>>(hashID); 29 }); 30 31 return result; 32 }
2,刪除某個setcode
// 刪除某個KEY的值,成功返回TRUE public bool RemoveKey(string key) { bool result = false; result = ExecuteCommand<bool>(client => { return client.Remove(key); }); return result; } // 刪除Set數據中的某個爲item的值 public bool RemoveItemFromSet(string setId, string item) { byte[] bvalue = System.Text.Encoding.UTF8.GetBytes(item); bool result = ExecuteCommand<bool>(client => { var rc = client as RedisClient; if (rc != null) { return rc.SRem(setId, bvalue) == 1; } return false; }); return result; }
3,搜索htm
//搜索key public List<string> SearchKeys(string pattern) { List<string> result = ExecuteCommand<List<string>>(client => { return client.SearchKeys(pattern); }); return result; }
4,增長某個元素到set
public bool AddItemToSet(string setId, string item) { byte[] bvalue = System.Text.Encoding.UTF8.GetBytes(item); bool result = ExecuteCommand<bool>(client => { var rc = client as RedisClient; if (rc != null) { return rc.SAdd(setId, bvalue) == 1; } return false; }); return result; }
這裏只分享幾個方法,其實還有不少關於set的操做方法。
利用Redis提供的Sets數據結構,能夠存儲一些集合性的數據,好比在微博應用中,能夠將一個用戶全部的關注人存在一個集合中,將其全部粉絲存在一個集合。Redis還爲集合提供了求交集、並集、差集等操做,能夠很是方便的實現如共同關注、共同喜愛、二度好友等功能,對上面的全部集合操做,你還可使用不一樣的命令選擇將結果返回給客戶端仍是存集到一個新的集合中。