Пример #1
0
        static void HashWriteTaskTest()
        {
            Console.WriteLine("Hash 多线程写入测试");
            Console.WriteLine("请输入DB:");
            var db = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("请输入KEY:");
            var key = Console.ReadLine();

            Console.WriteLine("请输入开始值:");
            var start = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("请输入结束值:");
            var end = Convert.ToInt32(Console.ReadLine());

            var stw = Stopwatch.StartNew();

            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis 开始执行。。。");

            var stw1 = Stopwatch.StartNew();

            var vals = new Dictionary <string, int>();

            for (int i = start; i < end; i++)
            {
                vals.Add($"{key}_{i}", i);
            }

            stw1.Stop();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis 整理完成,耗时{stw1.Elapsed.TotalMilliseconds} 毫秒。。。");

            var tasks      = new List <Task>();
            var task_count = 5;
            var task_total = end - start;
            var task_size  = Convert.ToInt32(task_total / task_count);

            task_count = task_total % task_count > 0 ? ++task_count : task_count;

            for (int i = 0; i < task_count; i++)
            {
                tasks.Add(Task.Factory.StartNew(m =>
                {
                    Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis 线程{m}开始执行。。。");

                    var task_stw   = Stopwatch.StartNew();
                    var task_index = Convert.ToInt32(m);
                    var task_start = task_index * task_size;

                    var temp_vals   = vals.Skip(task_index * task_size).Take(task_size).ToList();
                    var task_redis  = new CSRedis.CSRedisClient(null, $"127.0.0.1:6379,defaultDatabase={db},poolsize=100,ssl=false,writeBuffer=102400");
                    var task_result = new List <string>();

                    foreach (var item in temp_vals)
                    {
                        var isexis = task_redis.HExists(key, item.Key);

                        if (!isexis)
                        {
                            task_redis.HSet(key, item.Key, item.Value);
                        }
                    }

                    task_stw.Stop();
                    Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis 线程{m} 执行完成,写入数据 {temp_vals.Count()} ,耗时 {task_stw.Elapsed.TotalMilliseconds} ms");
                }, i));
            }

            while (!tasks.All(m => m.IsCompleted))
            {
            }

            stw.Stop();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis {vals.Count} 条数据读取完成,耗时 {stw.ElapsedMilliseconds} 毫秒。。。");
        }
Пример #2
0
        static void HashWriteTest()
        {
            Console.WriteLine("Hash 写入测试");
            Console.WriteLine("请输入DB:");
            var db = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("请输入KEY:");
            var key = Console.ReadLine();

            Console.WriteLine("请输入开始值:");
            var start = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("请输入结束值:");
            var end = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis 开始整理。。。");
            var rds = new CSRedis.CSRedisClient(null, $"127.0.0.1:6379,defaultDatabase={db},poolsize=100,ssl=false,writeBuffer=102400");


            var stw = Stopwatch.StartNew();

            var vals = new Dictionary <string, int>();

            for (int i = start; i < end; i++)
            {
                vals.Add($"{key}_{i}", i);
            }

            stw.Stop();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis 整理完成,耗时{stw.Elapsed.TotalMilliseconds} 毫秒。。。");

            var page_size  = 500000;
            var page_index = 0;
            var total_page = Convert.ToInt32(vals.Count / page_size) + (vals.Count % page_size > 0 ? 1 : 0);

            var stw01 = Stopwatch.StartNew();

            //do
            // {
            stw.Restart();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis Page {page_index} 开始提取。。。");

            var temp_vals = vals.Skip(page_index * page_size).Take(page_size);

            stw.Stop();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis Page {page_index} 提取耗时 {stw.ElapsedMilliseconds} 毫秒。。。");

            stw.Restart();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis Page {page_index} 开始写入。。。");

            foreach (var dic in vals)
            {
                var isexis = rds.HExists(key, dic.Key);

                if (!isexis)
                {
                    rds.HSet(key, dic.Key, dic.Value);
                }
            }

            stw.Stop();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis Page {page_index} 写入完成,耗时 {stw.ElapsedMilliseconds} 毫秒。。。");

            page_index++;

            //} while (total_page > page_index);


            stw01.Stop();
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff} Redis {end - start} 次写入完成,耗时{stw01.Elapsed.TotalMilliseconds} 毫秒");
        }