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

摘要:
Set:使用哈希表来保持字符串的唯一性,没有顺序,并存储一些聚合数据//////设置:使用哈希表来保持字符串的唯一性,无需排序,并存储一些聚合数据。//1.普通朋友和次要朋友///2.使用唯一性,您可以计算访问网站的所有独立IP//publicclassRedisetService:RedisBase{#region Add///<summary>//

Set:用哈希表来保持字符串的唯一性,没有先后顺序,存储一些集合性的数据

C# 通过ServiceStack 操作Redis——Set类型的使用及示例第1张C# 通过ServiceStack 操作Redis——Set类型的使用及示例第2张
    /// <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("刘备");

效果图

C# 通过ServiceStack 操作Redis——Set类型的使用及示例第3张

 删除几条数据

                //6. 删除setId中指定value
                client.RemoveItemFromSet("刘备", "小6");
                //7. 随机删除setId集合中的一个值,并返回该值
                string value2=client.PopItemFromSet("刘备");
                // 随机删除setId集合中的2个值,并返回这2个值
                List<string> value3 = client.PopItemsFromSet("刘备", 2);

C# 通过ServiceStack 操作Redis——Set类型的使用及示例第4张

 再添加一个集合 “张飞”

                //多添加 关注张飞的用户
                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("张飞");

C# 通过ServiceStack 操作Redis——Set类型的使用及示例第5张

 下面就是集合一些操作:交、并、差、补

                //获取交集
                HashSet<string> data1=client.GetIntersectFromSets("刘备", "张飞");
                //获取并集
                HashSet<string> data2 = client.GetUnionFromSets("刘备", "张飞");
                //获取差集
                HashSet<string> data3 = client.GetDifferencesFromSet("刘备","张飞");
                //补集
                 client.StoreDifferencesFromSet("关羽", "刘备", "张飞");
                HashSet<string> data4 = client.GetAllItemsFromSet("关羽");

C# 通过ServiceStack 操作Redis——Set类型的使用及示例第6张

 C# 通过ServiceStack 操作Redis——Set类型的使用及示例第7张

免责声明:文章转载自《C# 通过ServiceStack 操作Redis——Set类型的使用及示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇无废话JavaScript(下)mysql中文乱码解决方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx反向代理取得IP地址

nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中。 nginx反向代理配置时,一般会添加下面的配置:       proxy_set_header Host $host;      proxy_...

vue升级Babel支持可选链和合并空值运算符

一、babel作用: (我偷懒了,直接用官网介绍) Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。据我所知, 无论是webpack项目还是vite项目都需要使用到babel来编译(.vue)文件。=> vite3支持jsx...

Ant Design Pro V5 从服务器请求菜单(typescript版)

【前言】 找了很多Admin模板,最后还是看中了AntDesignPro(下文简写antd pro)这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro.ant.design/index-cn 该套模板是使用了React开发框架作为基础,AntDesign(蚂蚁金服开源UI组件库)作为UI库,集成了Dva,...

redis发布订阅

三个角色,提供的redis命令 1.发布者 publish 频道 消息 给频道发消息 2.订阅者 SUBSCRIBE 频道 订阅频道 PSUBSCRIBE 频道*支持模糊匹配的订阅 3.频道 channel 频道名 自定义 redis持久化之RDB 1.在配置文件中添加参数,开启rdb...

httpclient 实现文件上传中转

开发功能: web前端提交上传文件 —> a服务器接收 —> 转发到b服务器进行文件处理 下面是简单实现的代码,具体细节优化根本自己的需求更改。 public String handleResponse(HttpServletRequest request, HttpServletResponse response)...

一站式Web开发套件BeetleX.WebFamily

          BeetleX.WebFamily是一款前后端分离的Web开发套件,但它并不依赖于nodejs/npm/webpack等相关工具;而使用自身实现的方式来完成前后端分离的Web应用开发;套件以组件的方式发布,只需要在项目引用相关组件即可实现前后端分离开发,开发出来的项目可直接部署在装用.NetCore的Linux和Windows系统上。...