C# 通過ServiceStack 操作Redis——Set類型的使用及示例


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
    }
View Code

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("關羽");

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM