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

     

    !

    • 作       者 : 明志德道
    • 希     望: 如果内容对您有用,动动小手点个赞吧,您的支持就是我持续写作的动力!
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
  • 相关阅读:
    Java 定时任务
    Swing中常用的方法
    瀑布流ajax分页
    权限管理
    图片自动加水印
    jsp自动生成静态页(提供思路)
    分页查询语句
    使用phpmailer发送邮件(以QQ邮箱为例)
    在浏览器的标签页显示网站标志图标(或指定图标)的方法
    随机生成验证码
  • 原文地址:https://www.cnblogs.com/for-easy-fast/p/14531235.html
Copyright © 2020-2023  润新知