Ejemplo n.º 1
0
        static void Test()
        {
            Console.WriteLine("Wenli.Drive.Redis 批量操作实例");

            var redisConfig = new RedisConfig()
            {
                SectionName     = "Instance",
                Type            = RedisConnectType.Instance,
                Masters         = "127.0.0.1:6379",
                Slaves          = "127.0.0.1:6380",
                Password        = "******",
                DefaultDatabase = 0,
                BusyRetryWaitMS = 1000
            };

            var redisHelper = RedisHelperBuilder.Build(redisConfig);

            using (var redisBatcher = redisHelper.GetRedisOperation().CreateBatcher())
            {
                for (int i = 0; i < 100; i++)
                {
                    redisBatcher.Batch.StringSetAsync($"batch_{i}", $"val_{i}");
                }
            }

            Console.Read();
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.Title = "Wenli.Drive.Redis驱动测试";

            Console.WriteLine("Wenli.Drive.Redis test");

            Console.WriteLine("输入s 测试哨兵模式,输入c测试cluster模式,M为连续,l为锁测试,其它为单实例模式");


            var redisConfig = new RedisConfig()
            {
                SectionName     = "Instance",
                Type            = RedisConnectType.Instance,
                Masters         = "127.0.0.1:6379",
                Slaves          = "127.0.0.1:6380",
                Password        = "******",
                DefaultDatabase = 0,
                BusyRetryWaitMS = 1000
            };


            var sentinelConfig = new RedisConfig()
            {
                SectionName = "Sentinel",
                Type        = RedisConnectType.Sentinel,
                Masters     = "127.0.0.1:26379",
                Password    = "******",
                ServiceName = "mymaster"
            };

            var clusterConfig = new RedisConfig()
            {
                SectionName = "Cluster",
                Type        = RedisConnectType.Cluster,
                Masters     = "127.0.0.1:6380",
                Password    = "******"
            };

            while (true)
            {
                var c = Console.ReadLine();

                if (c.ToUpper() == "S")
                {
                    #region sentinel
                    Console.WriteLine("Wenli.Drive.Redis test 进入哨兵模式---------------------");

                    var redisHelper = RedisHelperBuilder.Build(clusterConfig);


                    #region string
                    Console.ReadLine();
                    Console.WriteLine("string get/set test");

                    redisHelper.GetRedisOperation().StringSet("abcabcabc", "123123");
                    Console.WriteLine("写入key:abcabcabc,value:123123");

                    var str = redisHelper.GetRedisOperation().StringGet("abcabcabc");
                    Console.WriteLine("查询key:abcabcabc,value:" + str);

                    redisHelper.GetRedisOperation().KeyDelete("abcabcabc");
                    Console.WriteLine("移除key:abcabcabc");
                    #endregion

                    #region hashset
                    Console.ReadLine();
                    Console.WriteLine("hashset get/set test");
                    var testModel = new DemoModel()
                    {
                        ID      = Guid.NewGuid().ToString("N"),
                        Age     = 18,
                        Name    = "Kitty",
                        Created = DateTime.Now
                    };

                    redisHelper.GetRedisOperation().HashSet <DemoModel>(testModel.Name, testModel.ID, testModel);
                    Console.WriteLine(string.Format("写入hashid:{0},key:{1}", testModel.Name, testModel.ID));

                    testModel = redisHelper.GetRedisOperation().HashGet <DemoModel>(testModel.Name, testModel.ID);
                    Console.WriteLine(string.Format("查询hashid:{0},key:{1}", testModel.Name, testModel.ID));

                    redisHelper.GetRedisOperation().HashDelete(testModel.Name, testModel.ID);
                    Console.WriteLine("移除hash");
                    #endregion

                    #region 队列
                    Console.ReadLine();
                    Console.WriteLine("list test");

                    redisHelper.GetRedisOperation().Enqueue("list", "listvalue");
                    Console.WriteLine("入队:list,value:listvalue");

                    Console.WriteLine("list.coumt:" + redisHelper.GetRedisOperation().QueueCount("list"));

                    Console.WriteLine(string.Format("出队:list,value:{0}", redisHelper.GetRedisOperation().Dnqueue("list")));
                    Console.WriteLine("list.coumt:" + redisHelper.GetRedisOperation().QueueCount("list"));
                    #endregion

                    #region sortedset
                    Console.ReadLine();
                    Console.WriteLine("sortedset test");
                    Console.WriteLine(string.Format("sortedset add :{0}", redisHelper.GetRedisOperation().SortedSetAdd("sortedset", "sortedset", 0)));
                    var list = redisHelper.GetRedisOperation().GetSortedSetRangeByRankWithSocres("sortedset", 0, 10000, 1, 9999, true);
                    Console.WriteLine(string.Format("sortedset getlist :{0}", list));
                    Console.WriteLine(string.Format("sortedset remove :{0}", redisHelper.GetRedisOperation().RemoveItemFromSortedSet("sortedset", "sortedset")));
                    #endregion

                    #region pub/sub
                    Console.ReadLine();
                    Console.WriteLine("sub/pub test");

                    Console.WriteLine("订阅频道:happy");

                    redisHelper.GetRedisOperation().SubscribeWithChannel("happy", (x, y) =>
                    {
                        Console.WriteLine(string.Format("订阅者收到消息;频道:{0},消息:{1}", x, y));
                    });

                    Console.WriteLine("发布频道happy 10 条测试消息");
                    for (int i = 1; i <= 10; i++)
                    {
                        redisHelper.GetRedisOperation().Publish("happy", "this is a test message" + i);
                        Thread.Sleep(400);
                    }
                    #endregion
                    Console.ReadLine();
                    redisHelper.GetRedisOperation().Unsubscribe("happy");


                    #endregion
                }
                else if (c.ToUpper() == "C")
                {
                    #region cluster
                    Console.WriteLine("Wenli.Drive.Redis test 进入集群模式---------------------");

                    var redisHelper = RedisHelperBuilder.Build(clusterConfig);

                    #region string
                    Console.ReadLine();
                    Console.WriteLine("string get/set test");

                    redisHelper.GetRedisOperation().StringSet("abcabcabc", "123123");
                    Console.WriteLine("写入key:abcabcabc,value:123123");

                    var str = redisHelper.GetRedisOperation().StringGet("abcabcabc");
                    Console.WriteLine("查询key:abcabcabc,value:" + str);

                    redisHelper.GetRedisOperation().KeyDelete("abcabcabc");
                    Console.WriteLine("移除key:abcabcabc");
                    #endregion

                    #region hashset
                    Console.ReadLine();
                    Console.WriteLine("hashset get/set test");
                    var testModel = new DemoModel()
                    {
                        ID      = Guid.NewGuid().ToString("N"),
                        Age     = 18,
                        Name    = "Kitty",
                        Created = DateTime.Now
                    };

                    redisHelper.GetRedisOperation().HashSet <DemoModel>(testModel.Name, testModel.ID, testModel);
                    Console.WriteLine(string.Format("写入hashid:{0},key:{1}", testModel.Name, testModel.ID));

                    testModel = redisHelper.GetRedisOperation().HashGet <DemoModel>(testModel.Name, testModel.ID);
                    Console.WriteLine(string.Format("查询hashid:{0},key:{1}", testModel.Name, testModel.ID));

                    redisHelper.GetRedisOperation().HashDelete(testModel.Name, testModel.ID);
                    Console.WriteLine("移除hash");
                    #endregion

                    #region 队列
                    Console.ReadLine();
                    Console.WriteLine("list test");

                    redisHelper.GetRedisOperation().Enqueue("list", "listvalue");
                    Console.WriteLine("入队:list,value:listvalue");

                    Console.WriteLine("list.coumt:" + redisHelper.GetRedisOperation().QueueCount("list"));

                    Console.WriteLine(string.Format("出队:list,value:{0}", redisHelper.GetRedisOperation().Dnqueue("list")));
                    Console.WriteLine("list.coumt:" + redisHelper.GetRedisOperation().QueueCount("list"));
                    #endregion


                    #region pub/sub
                    Console.ReadLine();
                    Console.WriteLine("sub/pub test");

                    Console.WriteLine("订阅频道:happy");

                    redisHelper.GetRedisOperation().SubscribeWithChannel("happy", (x, y) =>
                    {
                        Console.WriteLine(string.Format("订阅者收到消息;频道:{0},消息:{1}", x, y));
                    });

                    Console.WriteLine("发布频道happy 10 条测试消息");
                    for (int i = 1; i <= 10; i++)
                    {
                        redisHelper.GetRedisOperation().Publish("happy", "this is a test message" + i);
                        Thread.Sleep(400);
                    }
                    #endregion

                    Console.ReadLine();

                    redisHelper.GetRedisOperation().Unsubscribe("happy");
                    #endregion
                }
                else if (c.ToUpper() == "M")
                {
                    #region default redis
                    Console.WriteLine("Wenli.Drive.Redis test 进入连续测试模式---------------------");

                    string value = "123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式123123进入连续测试模式";

                    var td1 = new Thread(new ThreadStart(() =>
                    {
                        var redisHelper = RedisHelperBuilder.Build(sentinelConfig);

                        Parallel.For(0, 100000, countIndex =>
                        {
                            #region string
                            Console.WriteLine("string get/set test");
                            redisHelper.GetRedisOperation().StringSet(countIndex.ToString(), value);
                            Console.WriteLine("写入key:abcabcabc,value:123123");

                            var str = redisHelper.GetRedisOperation().StringGet(countIndex.ToString());
                            Console.WriteLine("查询key:abcabcabc,value:" + str);

                            redisHelper.GetRedisOperation().KeyDelete(countIndex.ToString());
                            Console.WriteLine("移除key:abcabcabc");
                            #endregion

                            #region hashset
                            Console.WriteLine("hashset get/set test");
                            var testModel = new DemoModel()
                            {
                                ID      = Guid.NewGuid().ToString("N"),
                                Age     = 18,
                                Name    = "Kitty",
                                Created = DateTime.Now
                            };

                            redisHelper.GetRedisOperation().HashSet <DemoModel>(testModel.Name, testModel.ID, testModel);
                            Console.WriteLine(string.Format("写入hashid:{0},key:{1}", testModel.Name, testModel.ID));

                            testModel = redisHelper.GetRedisOperation().HashGet <DemoModel>(testModel.Name, testModel.ID);
                            Console.WriteLine(string.Format("查询hashid:{0},key:{1}", testModel.Name, testModel.ID));

                            redisHelper.GetRedisOperation().HashDelete(testModel.Name, testModel.ID);
                            Console.WriteLine("移除hash");
                            #endregion
                        });
                    }));
                    var td2 = new Thread(new ThreadStart(() =>
                    {
                        Parallel.For(0, 100000, countIndex =>
                        {
                            var redisHelper = RedisHelperBuilder.Build(sentinelConfig);

                            #region string
                            Console.WriteLine("string get/set test");
                            redisHelper.GetRedisOperation().StringSet(countIndex.ToString(), value);
                            Console.WriteLine("写入key:abcabcabc,value:123123");

                            var str = redisHelper.GetRedisOperation().StringGet(countIndex.ToString());
                            Console.WriteLine("查询key:abcabcabc,value:" + str);

                            redisHelper.GetRedisOperation().KeyDelete(countIndex.ToString());
                            Console.WriteLine("移除key:abcabcabc");
                            #endregion

                            #region hashset
                            Console.WriteLine("hashset get/set test");
                            var testModel = new DemoModel()
                            {
                                ID      = Guid.NewGuid().ToString("N"),
                                Age     = 18,
                                Name    = "Kitty",
                                Created = DateTime.Now
                            };

                            redisHelper.GetRedisOperation().HashSet <DemoModel>(testModel.Name, testModel.ID, testModel);
                            Console.WriteLine(string.Format("写入hashid:{0},key:{1}", testModel.Name, testModel.ID));

                            testModel = redisHelper.GetRedisOperation().HashGet <DemoModel>(testModel.Name, testModel.ID);
                            Console.WriteLine(string.Format("查询hashid:{0},key:{1}", testModel.Name, testModel.ID));

                            redisHelper.GetRedisOperation().HashDelete(testModel.Name, testModel.ID);
                            Console.WriteLine("移除hash");
                            #endregion
                        });
                    }));

                    td1.Start();
                    td2.Start();

                    while (td1.IsAlive || td2.IsAlive)
                    {
                        Thread.Sleep(50);
                    }

                    Console.WriteLine("Wenli.Drive.Redis test 任务已完成!---------------------");
                    #endregion
                }
                else if (c.ToLower() == "l")
                {
                    var redisHelper = RedisHelperBuilder.Build(redisConfig);

                    Stopwatch sw = new Stopwatch();

                    string key = "lock_test";

                    int total = 100000;

                    sw.Start();

                    Parallel.For(0, 100000, i =>
                    {
                        total--;
                    });

                    Console.WriteLine(string.Format("未加锁 total:{0} time:{1}", total, sw.ElapsedMilliseconds));
                    sw.Reset();
                    Console.WriteLine("回车锁测试");
                    Console.ReadLine();
                    sw.Restart();

                    total = 100000;

                    int f = 0;

                    int val = 1;

                    Parallel.For(0, total, i =>
                    {
                        Stopwatch sw1 = new Stopwatch();

                        sw1.Start();

                        if (redisHelper.GetRedisOperation().Lock(key, 30000, 10))
                        {
                            if (!int.TryParse(redisHelper.GetRedisOperation().StringGet(key), out val))
                            {
                                val = 1;
                            }
                            else
                            {
                                val++;
                            }

                            redisHelper.GetRedisOperation().StringSet(key, val.ToString());

                            redisHelper.GetRedisOperation().UnLock(key);
                        }
                        else
                        {
                            Interlocked.Add(ref f, 1);
                            Console.Write("f:{0}", f);
                        }

                        sw1.Stop();
                    });

                    Console.WriteLine(string.Format("已加锁 total:{0} time:{1} f:{2} StringGet:{3}", total, sw.ElapsedMilliseconds, f, redisHelper.GetRedisOperation().StringGet(key)));
                    sw.Reset();
                    Console.ReadLine();
                    redisHelper.GetRedisOperation().KeyDelete(key);
                }
                else
                {
                    #region default redis
                    Console.WriteLine("Wenli.Drive.Redis test 进入单实例模式---------------------");

                    var redisHelper = RedisHelperBuilder.Build(redisConfig);

                    #region string
                    Console.ReadLine();
                    Console.WriteLine("string get/set test");

                    redisHelper.GetRedisOperation(12).StringSet("abcabcabc", "123123");
                    Console.WriteLine("写入key:abcabcabc,value:123123");

                    var str = redisHelper.GetRedisOperation(12).StringGet("abcabcabc");
                    Console.WriteLine("查询key:abcabcabc,value:" + str);

                    redisHelper.GetRedisOperation(12).KeyDelete("abcabcabc");
                    Console.WriteLine("移除key:abcabcabc");
                    #endregion

                    #region hashset
                    Console.ReadLine();
                    Console.WriteLine("hashset get/set test");
                    var testModel = new DemoModel()
                    {
                        ID      = Guid.NewGuid().ToString("N"),
                        Age     = 18,
                        Name    = "Kitty",
                        Created = DateTime.Now
                    };

                    redisHelper.GetRedisOperation().HashSet <DemoModel>(testModel.Name, testModel.ID, testModel);
                    Console.WriteLine(string.Format("写入hashid:{0},key:{1}", testModel.Name, testModel.ID));

                    testModel = redisHelper.GetRedisOperation().HashGet <DemoModel>(testModel.Name, testModel.ID);
                    Console.WriteLine(string.Format("查询hashid:{0},key:{1}", testModel.Name, testModel.ID));

                    redisHelper.GetRedisOperation().HashGetAll <DemoModel>(testModel.Name, 1, 1);

                    redisHelper.GetRedisOperation().HashDelete(testModel.Name, testModel.ID);
                    Console.WriteLine("移除hash");
                    #endregion

                    #region 队列
                    Console.ReadLine();
                    Console.WriteLine("list test");

                    redisHelper.GetRedisOperation().Enqueue("list", "listvalue");
                    Console.WriteLine("入队:list,value:listvalue");

                    Console.WriteLine("list.coumt:" + redisHelper.GetRedisOperation().QueueCount("list"));

                    Console.WriteLine(string.Format("出队:list,value:{0}", redisHelper.GetRedisOperation().Dnqueue("list")));
                    Console.WriteLine("list.coumt:" + redisHelper.GetRedisOperation().QueueCount("list"));
                    #endregion

                    #region pub/sub
                    Console.ReadLine();
                    Console.WriteLine("sub/pub test");

                    Console.WriteLine("订阅频道:happy");

                    redisHelper.GetRedisOperation().SubscribeWithChannel("happy", (x, y) =>
                    {
                        Console.WriteLine(string.Format("订阅者收到消息;频道:{0},消息:{1}", x, y));
                    });

                    Console.WriteLine("发布频道happy 10 条测试消息");
                    for (int i = 1; i <= 10; i++)
                    {
                        redisHelper.GetRedisOperation().Publish("happy", "this is a test message" + i);
                        Thread.Sleep(400);
                    }
                    #endregion

                    Console.ReadLine();

                    redisHelper.GetRedisOperation().Unsubscribe("happy");

                    #endregion
                }
            }

            Console.ReadLine();
        }