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} 毫秒。。。"); }
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} 毫秒"); }