zoukankan      html  css  js  c++  java
  • Redis学习系列五Set(集合)

    一、简介

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

    二、用法

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

    三、代码实战

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

    C#控制台:

    给RedisClient.cs扩展如下方法:

            /// <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代码如下:

        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); } } }

  • 相关阅读:
    Struts2操作request、session和application对象
    json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]
    Java中的内部接口
    Struts2.0 xml文件的配置(package,namespace,action)
    过滤器实用案例
    Struts2教程
    struts全包导入问题
    Maven构建项目速度太慢的解决办法 Maven 调试
    HBase之五:hbase的region分区
    HBase之二:Hbase优化
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/10171817.html
Copyright © 2011-2022 走看看