Set:用哈希表來保持字符串的唯一性,沒有先后順序,存儲一些集合性的數據

/// <summary> /// Set:用哈希表來保持字符串的唯一性,沒有先后順序,存儲一些集合性的數據 /// 1.共同好友、二度好友 /// 2.利用唯一性,可以統計訪問網站的所有獨立 IP /// </summary> public class RedisSetService : RedisBase { #region 添加 /// <summary> /// key集合中添加value值 /// </summary> public void Add(string key, string value) { base.iClient.AddItemToSet(key, value); } /// <summary> /// key集合中添加list集合 /// </summary> public void Add(string key, List<string> list) { base.iClient.AddRangeToSet(key, list); } #endregion #region 獲取 /// <summary> /// 隨機獲取key集合中的一個值 /// </summary> public string GetRandomItemFromSet(string key) { return base.iClient.GetRandomItemFromSet(key); } /// <summary> /// 獲取key集合值的數量 /// </summary> public long GetCount(string key) { return base.iClient.GetSetCount(key); } /// <summary> /// 獲取所有key集合的值 /// </summary> public HashSet<string> GetAllItemsFromSet(string key) { return base.iClient.GetAllItemsFromSet(key); } #endregion #region 刪除 /// <summary> /// 隨機刪除key集合中的一個值 /// </summary> public string RandomRemoveItemFromSet(string key) { return base.iClient.PopItemFromSet(key); } /// <summary> /// 刪除key集合中的value /// </summary> public void RemoveItemFromSet(string key, string value) { base.iClient.RemoveItemFromSet(key, value); } #endregion #region 其它 /// <summary> /// 從fromkey集合中移除值為value的值,並把value添加到tokey集合中 /// </summary> public void MoveBetweenSets(string fromkey, string tokey, string value) { base.iClient.MoveBetweenSets(fromkey, tokey, value); } /// <summary> /// 返回keys多個集合中的並集,返還hashset /// </summary> public HashSet<string> GetUnionFromSets(params string[] keys) { return base.iClient.GetUnionFromSets(keys); } /// <summary> /// 返回keys多個集合中的交集,返還hashset /// </summary> public HashSet<string> GetIntersectFromSets(params string[] keys) { return base.iClient.GetIntersectFromSets(keys); } /// <summary> /// 返回keys多個集合中的差集,返還hashset /// </summary> /// <param name="fromKey">原集合</param> /// <param name="keys">其他集合</param> /// <returns>出現在原集合,但不包含在其他集合</returns> public HashSet<string> GetDifferencesFromSet(string fromKey, params string[] keys) { return base.iClient.GetDifferencesFromSet(fromKey,keys); } /// <summary> /// keys多個集合中的並集,放入newkey集合中 /// </summary> public void StoreUnionFromSets(string newkey, string[] keys) { base.iClient.StoreUnionFromSets(newkey, keys); } /// <summary> /// 把fromkey集合中的數據與keys集合中的數據對比,fromkey集合中不存在keys集合中,則把這些不存在的數據放入newkey集合中 /// </summary> public void StoreDifferencesFromSet(string newkey, string fromkey, string[] keys) { base.iClient.StoreDifferencesFromSet(newkey, fromkey, keys); } #endregion }
ServiceStack 程序集里面沒有方法注解,我在這里將注解添加上去,有不當之處,歡迎指正
Console.WriteLine("---Set類型---"); //添加 setId集合中添加item值 client.AddItemToSet(setId, item); //setId集合中添加多個item client.AddRangeToSet(setId,items); //獲取 隨機獲取setId集合中的一個值 client.GetRandomItemFromSet(setId); //獲取setId集合值的數量 client.GetSetCount(setId); // 獲取setId集合中所有的值 client.GetAllItemsFromSet(setId); // 隨機刪除setId集合中的一個值 client.PopItemFromSet(setId); // 刪除setId集合中的item client.RemoveItemFromSet(setId, item); //從fromSetId集合中移除值為item的值,並把item添加到toSetId集合中 client.MoveBetweenSets(fromSetId, toSetId, item); //返回多個setId集合中的並集,返還hashset client.GetUnionFromSets(setIds); //返回多個setId集合中的交集,返還hashset client.GetIntersectFromSets(setIds); //返回fromSetId 與多個withSetId集合中的差集,返還hashset client.GetDifferencesFromSet(fromSetId, withSetIds); // 多個setId集合中的並集,放入intoSetId集合中 client.StoreUnionFromSets(intoSetId, setIds); //把fromSetId集合中的數據與withSetIds集合中的數據對比,fromSetId集合中不存在keys集合中,則把這些不存在的數據放入intoSetId集合中 client.StoreDifferencesFromSet(intoSetId, fromSetId, withSetIds);
下面是數據輸入
//1.添加,value不重復,添加多個Marren1也只有一個 //單個添加 關注劉備的用戶 client.AddItemToSet("劉備", "小1"); client.AddItemToSet("劉備", "小2"); client.AddItemToSet("劉備", "小2"); client.AddItemToSet("劉備", "小3"); client.AddItemToSet("劉備", "小3"); client.AddItemToSet("劉備", "小3"); client.AddItemToSet("劉備", "小4"); client.AddItemToSet("劉備", "小5"); client.AddItemToSet("劉備", "小6"); client.AddItemToSet("劉備", "小7"); client.AddItemToSet("劉備", "小8"); client.AddItemToSet("劉備", "小8"); //2.獲取setId集合的數量 long count1= client.GetSetCount("劉備"); //3.判斷setId中是否包含指定值 bool b1=client.SetContainsItem("劉備", "小5"); //4.隨機獲取setId集合中的一個值 string value1=client.GetRandomItemFromSet("劉備"); //5.獲取setId中的所有值 HashSet<string> user1= client.GetAllItemsFromSet("劉備");
效果圖
刪除幾條數據
//6. 刪除setId中指定value client.RemoveItemFromSet("劉備", "小6"); //7. 隨機刪除setId集合中的一個值,並返回該值 string value2=client.PopItemFromSet("劉備"); // 隨機刪除setId集合中的2個值,並返回這2個值 List<string> value3 = client.PopItemsFromSet("劉備", 2);
再添加一個集合 “張飛”
//多添加 關注張飛的用戶 List<string> items = new List<string>() { "小1", "小12", "小3", "小3", "小3", "小14", "小5" , "小16", "小7", "小8", "小18" }; client.AddRangeToSet("張飛", items); HashSet<string> user2 = client.GetAllItemsFromSet("張飛");
下面就是集合一些操作:交、並、差、補
//獲取交集 HashSet<string> data1=client.GetIntersectFromSets("劉備", "張飛"); //獲取並集 HashSet<string> data2 = client.GetUnionFromSets("劉備", "張飛"); //獲取差集 HashSet<string> data3 = client.GetDifferencesFromSet("劉備","張飛"); //補集 client.StoreDifferencesFromSet("關羽", "劉備", "張飛"); HashSet<string> data4 = client.GetAllItemsFromSet("關羽");