前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis学习系列五Set(集合)

Redis学习系列五Set(集合)

作者头像
郑小超.
发布2018-12-28 14:32:35
6890
发布2018-12-28 14:32:35
举报
文章被收录于专栏:GreenLeavesGreenLeaves

一、简介

Redis中的Set(集合)相当于C#中的HashSet,它内部的键值对时无序的、唯一的。用过Dictionary的都知道,Dictionary都知道,里面的每个键值对肯定是唯一的,因为键不允许重复.而Redis中的Set相当于一个特殊的字典,字典中所有的Value值都是null.当集合中最后一个元素被移除,该集合的内存会被回收.

二、用法

Redis中的Set集合可以用来存储某秒杀活动中,商品ID和幸运儿的ID,因为一件商品只能被一个用户抢到,不可能被两个用户同时抢到.

三、代码实战

代码还是基于前面文章中的代码

C#控制台:

给RedisClient.cs扩展如下方法:

代码语言:javascript
复制
        /// <summary>
        /// 异步向Set(集合)中添加键值对
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static async Task<bool> SetAddAsync(RedisKey key, RedisValue value)
        {
            var db = GetDatabase();
            return await db.SetAddAsync(key, value);
        }

        /// <summary>
        /// 异步获取对应键的所有成员,无序
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static async Task<RedisValue[]> SetMembersAsync(RedisKey key)
        {
            var db = GetDatabase();
            return await db.SetMembersAsync(key);
        }

注:这里还有很多Api没有介绍,可以自行了解

program.cs代码如下:

代码语言:javascript
复制
    class Program
    {
        static Program()
        {
            //链式配置Redis
            AppConfiguration.Current.ConfigureRedis<RedisConfig>();
        }

        static void Main(string[] args)
        {
            StringSetGetAsync();
            Console.ReadKey();
        }

        static async void StringSetGetAsync()
        {
            var key = "测试商品Id";
            var userId = Guid.NewGuid().ToString();
            try
            {
                if (!await RedisClient.SetAddAsync(key, userId))
                {
                    //注:这里最好不要抛异常,会影响后续操作,写日志更合理
                    Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
                }
                //模拟重复插入
                if (!await RedisClient.SetAddAsync(key, userId))
                {
                    Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
                }
                
                //模拟继续插入
                if (!await RedisClient.SetAddAsync(key, Guid.NewGuid().ToString()))
                {
                    Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
                }

                if (!await RedisClient.SetAddAsync(key, Guid.NewGuid().ToString()))
                {
                    Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
                }

                //获取指定键的所有成员,并输出
                var members = await RedisClient.SetMembersAsync(key);
                foreach (var member in members)
                {
                    Console.WriteLine(member);
                }
            }
            catch (Exception ex)
            {
                //记录日志
                Console.WriteLine(ex.Message);
            }
                
        }
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档