using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
namespace WorkSample.StackExchange.Redis
{
class Program
{
// static readonly ConcurrentQueue<VehicleStationStatement> vehicleStationStatementsCenter = new ConcurrentQueue<VehicleStationStatement>();
static void Main(
string[] args)
{
// 1 001 广州东东信息技术有限公司
// 2 002 广州西西信息技术有限公司
var settlementCompanies =
new List<SettlementCompany>
{
new SettlementCompany {
Id =
1,
Code =
"001",
Name =
"广州东东信息技术有限公司"
},
new SettlementCompany {
Id =
2,
Code =
"002",
Name =
"广州西西信息技术有限公司"
}
};
// 汽车站场信息
// 1 001 东站 conn001token12
// 2 002 西站 conn002token12
var vehicleStations =
new List<VehicleStation>
{
new VehicleStation {
Id =
1,
Code =
"001",
Name =
"东站",
Token =
@"
Data Source = (localdb)\MSSQLLocalDB;
Initial Catalog = VehicleStationEast;
Integrated Security = True;
Connect Timeout = 30;
Encrypt = False;
TrustServerCertificate = False;
ApplicationIntent = ReadWrite;
MultiSubnetFailover = False"
},
new VehicleStation {
Id =
2,
Code =
"002",
Name =
"西站",
Token =
@"
Data Source = (localdb)\MSSQLLocalDB;
Initial Catalog = VehicleStationWest;
Integrated Security = True;
Connect Timeout = 30;
Encrypt = False;
TrustServerCertificate = False;
ApplicationIntent = ReadWrite;
MultiSubnetFailover = False"
}
};
// 校准配置信息
// 1 001 东站 001 广州东东信息技术有限公司 00010 东东
// 2 001 东站 002 广州西西信息技术有限公司 00012 西西
// 3 002 西站 001 广州东东信息技术有限公司 00001 广州东东信息技术有限公司
// 4 002 西站 002 广州西西信息技术有限公司 00002 广州西西信息技术有限公司
var correctionConfigurations =
new List<CorrectionConfiguration>
{
new CorrectionConfiguration {
Id =
1,
VehicleStationCode =
"001",
VehicleStationName =
"东站",
SettlementCompanyCode =
"001",
SettlementCompanyName =
"广州东东信息技术有限公司",
CorrectionSettlementCompanyCode =
"00010",
CorrectionSettlementCompanyName =
"东东"
},
new CorrectionConfiguration {
Id =
2,
VehicleStationCode =
"001",
VehicleStationName =
"东站",
SettlementCompanyCode =
"002",
SettlementCompanyName =
"广州西西信息技术有限公司",
CorrectionSettlementCompanyCode =
"00012",
CorrectionSettlementCompanyName =
"西西"
},
new CorrectionConfiguration {
Id =
3,
VehicleStationCode =
"002",
VehicleStationName =
"西站",
SettlementCompanyCode =
"001",
SettlementCompanyName =
"广州东东信息技术有限公司",
CorrectionSettlementCompanyCode =
"00001",
CorrectionSettlementCompanyName =
"广州东东信息技术有限公司"
},
new CorrectionConfiguration {
Id =
4,
VehicleStationCode =
"002",
VehicleStationName =
"西站",
SettlementCompanyCode =
"002",
SettlementCompanyName =
"广州西西信息技术有限公司",
CorrectionSettlementCompanyCode =
"00002",
CorrectionSettlementCompanyName =
"广州西西信息技术有限公司"
},
};
// 东站结算信息
// 1 [东站。100.0。东东] 00010 东东 2018-08-24 01:01 null
// 2 [东站。123.0。西西] 00012 西西 2018-08-24 01:02 null
/*
var vehicleStationStatementsEast = new List<VehicleStationStatement> {
new VehicleStationStatement {
Id = 1,
Detail = "[东站。100.0。东东]",
Code = "00010",
Name = "东东",
CreateTime = DateTime.Parse("2018-08-24 01:01:00"),
UpdateTime = DateTime.Parse("2018-08-24 01:05:00")
},
new VehicleStationStatement {
Id = 2,
Detail = "[东站。123.0。西西]",
Code = "00012",
Name = "西西",
CreateTime = DateTime.Parse("2018-08-24 01:02:00"),
UpdateTime = DateTime.Parse("2018-08-24 01:05:00")
}
};
*/
// 西站结算信息
// 1 [西站。101.0。广州东东信息技术有限公司] 00001 广州东东信息技术有限公司 2018-08-24 01:04 null
// 2 [西站。124.0。广州西西信息技术有限公司] 00002 广州西西信息技术有限公司 2018-08-24 01:03 null
/*
var vehicleStationStatementsWest = new List<VehicleStationStatement> {
new VehicleStationStatement {
Id = 1,
Detail = "[西站。101.0。广州东东信息技术有限公司]",
Code = "00001",
Name = "广州东东信息技术有限公司",
CreateTime = DateTime.Parse("2018-08-24 01:04:00"),
UpdateTime = DateTime.Parse("2018-08-24 01:05:00")
},
new VehicleStationStatement {
Id = 2,
Detail = "[西站。124.0。广州西西信息技术有限公司]",
Code = "00002",
Name = "广州西西信息技术有限公司",
CreateTime = DateTime.Parse("2018-08-24 01:03:00"),
UpdateTime = DateTime.Parse("2018-08-24 01:05:00")
}
};
*/
/*
Parallel.Invoke(
() =>
{
// 1 [东站。99。东东] 00010 东东 2018-08-24 01:01:00 2018-08-24 01:01:00
var code = "00010";
var name = "东东";
for (var i = 0; i < 10000; i++)
{
using (var connection = new SqlConnection(vehicleStations[0].Token))
{
var command = new SqlCommand(@"
INSERT INTO [VehicleStationStatement](Detail,Code,Name,CreateTime,UpdateTime)
VALUES(@Detail,@Code,@Name,@CreateTime,@UpdateTime)
", connection);
command.Parameters.AddWithValue("Detail", $"[{vehicleStations[0].Name}。{new Random().Next(1, 100)}。{name}。{i}]");
command.Parameters.AddWithValue("Code", code);
command.Parameters.AddWithValue("Name", name);
command.Parameters.AddWithValue("CreateTime", DateTime.Now);
command.Parameters.AddWithValue("UpdateTime", DateTime.Now);
connection.Open();
command.ExecuteNonQuery();
}
}
},
() =>
{
// 2 [东站。99。西西] 00012 西西 2018-08-24 01:01:00 2018-08-24 01:01:00
var code = "00012";
var name = "西西";
for (var i = 0; i < 20000; i++)
{
using (var connection = new SqlConnection(vehicleStations[0].Token))
{
var command = new SqlCommand(@"
INSERT INTO [VehicleStationStatement](Detail,Code,Name,CreateTime,UpdateTime)
VALUES(@Detail,@Code,@Name,@CreateTime,@UpdateTime)
", connection);
command.Parameters.AddWithValue("Detail", $"[{vehicleStations[0].Name}。{new Random().Next(1, 100)}。{name}。{i}]");
command.Parameters.AddWithValue("Code", code);
command.Parameters.AddWithValue("Name", name);
command.Parameters.AddWithValue("CreateTime", DateTime.Now);
command.Parameters.AddWithValue("UpdateTime", DateTime.Now);
connection.Open();
command.ExecuteNonQuery();
}
}
},
() =>
{
// 1 [西站。99。广州东东信息技术有限公司] 00001 广州东东信息技术有限公司 2018-08-24 01:01:00 2018-08-24 01:01:00
var code = "00001";
var name = "广州东东信息技术有限公司";
for (var i = 0; i < 30000; i++)
{
using (var connection = new SqlConnection(vehicleStations[1].Token))
{
var command = new SqlCommand(@"
INSERT INTO [VehicleStationStatement](Detail,Code,Name,CreateTime,UpdateTime)
VALUES(@Detail,@Code,@Name,@CreateTime,@UpdateTime)
", connection);
command.Parameters.AddWithValue("Detail", $"[{vehicleStations[1].Name}。{new Random().Next(1, 100)}。{name}。{i}]");
command.Parameters.AddWithValue("Code", code);
command.Parameters.AddWithValue("Name", name);
command.Parameters.AddWithValue("CreateTime", DateTime.Now);
command.Parameters.AddWithValue("UpdateTime", DateTime.Now);
connection.Open();
command.ExecuteNonQuery();
}
}
},
() =>
{
// 2 [西站。99。广州西西信息技术有限公司] 00002 广州西西信息技术有限公司 2018-08-24 01:01:00 2018-08-24 01:01:00
var code = "00002";
var name = "广州西西信息技术有限公司";
for (var i = 0; i < 40000; i++)
{
using (var connection = new SqlConnection(vehicleStations[1].Token))
{
var command = new SqlCommand(@"
INSERT INTO [VehicleStationStatement](Detail,Code,Name,CreateTime,UpdateTime)
VALUES(@Detail,@Code,@Name,@CreateTime,@UpdateTime)
", connection);
command.Parameters.AddWithValue("Detail", $"[{vehicleStations[1].Name}。{new Random().Next(1, 100)}。{name}。{i}]");
command.Parameters.AddWithValue("Code", code);
command.Parameters.AddWithValue("Name", name);
command.Parameters.AddWithValue("CreateTime", DateTime.Now);
command.Parameters.AddWithValue("UpdateTime", DateTime.Now);
connection.Open();
command.ExecuteNonQuery();
}
}
}
);
*/
var database =
RedisHelper.GetConnectionMultiplexer().GetDatabase();
Parallel.ForEach(vehicleStations, (vehicleStation) =>
{
var connection =
new SqlConnection(vehicleStation.Token);
var command =
new SqlCommand(
@"
SELECT Id,Detail,Code,Name,CreateTime,UpdateTime
FROM [VehicleStationStatement]", connection);
connection.Open();
using (
var reader =
command.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
var id = reader.GetInt32(
0);
var detail = reader.GetString(
1);
var code = reader.GetString(
2);
var name = reader.GetString(
3);
var createTime = reader.GetDateTime(
4);
var updateTime = reader.GetDateTime(
5);
var config = correctionConfigurations.SingleOrDefault(v => v.VehicleStationCode == vehicleStation.Code && v.CorrectionSettlementCompanyCode ==
code);
if (config ==
null)
break;
// vehicleStationStatementsCenter.Enqueue(new VehicleStationStatement
// {
// Id = 0,
// Detail = detail,
// Code = config.SettlementCompanyCode,
// Name = config.SettlementCompanyName,
// CreateTime = createTime,
// UpdateTime = updateTime
// });
database.ListRightPush(
"VehicleStationStatement", JsonConvert.SerializeObject(
new VehicleStationStatement
{
Id =
0,
Detail =
detail,
Code =
config.SettlementCompanyCode,
Name =
config.SettlementCompanyName,
CreateTime =
createTime,
UpdateTime =
updateTime
}));
}
}
});
// Console.WriteLine(vehicleStationStatementsCenter.Count);
Console.WriteLine(database.ListLength(
"VehicleStationStatement"));
Parallel.Invoke(
() =>
{
while (database.ListLength(
"VehicleStationStatement") >
0)
{
Console.WriteLine($"[01] {database.ListLeftPop("VehicleStationStatement
")}");
}
},
() =>
{
while (database.ListLength(
"VehicleStationStatement") >
0)
{
Console.WriteLine($"[02] {database.ListLeftPop("VehicleStationStatement
")}");
}
},
() =>
{
while (database.ListLength(
"VehicleStationStatement") >
0)
{
Console.WriteLine($"[03] {database.ListLeftPop("VehicleStationStatement
")}");
}
}
);
}
}
public class SettlementCompany
{
public int Id {
get;
set; }
public string Code {
get;
set; }
public string Name {
get;
set; }
}
public class VehicleStation
{
public int Id {
get;
set; }
public string Code {
get;
set; }
public string Name {
get;
set; }
public string Token {
get;
set; }
}
public class CorrectionConfiguration
{
public int Id {
get;
set; }
public string VehicleStationCode {
get;
set; }
public string VehicleStationName {
get;
set; }
public string SettlementCompanyCode {
get;
set; }
public string SettlementCompanyName {
get;
set; }
public string CorrectionSettlementCompanyCode {
get;
set; }
public string CorrectionSettlementCompanyName {
get;
set; }
}
public class VehicleStationStatement
{
public int Id {
get;
set; }
public string Detail {
get;
set; }
public string Code {
get;
set; }
public string Name {
get;
set; }
public DateTime CreateTime {
get;
set; }
public DateTime? UpdateTime {
get;
set; }
}
public static class RedisHelper
{
private static readonly ConcurrentDictionary<
string, ConnectionMultiplexer> _connectionMultiplexers =
new ConcurrentDictionary<
string, ConnectionMultiplexer>
();
private static readonly object _locker =
new object();
private static ConnectionMultiplexer _connectionMultiplexer;
public static ConnectionMultiplexer GetConnectionMultiplexer(
string connectionString =
"localhost")
{
if (_connectionMultiplexer ==
null)
{
lock (_locker)
{
if (_connectionMultiplexer ==
null || _connectionMultiplexer.IsConnected ==
false)
{
if (_connectionMultiplexers.ContainsKey(connectionString) ==
false)
{
var connectionMultiplexer =
ConnectionMultiplexer.Connect(connectionString);
connectionMultiplexer.ConfigurationChanged +=
ConfigurationChanged;
connectionMultiplexer.ConfigurationChangedBroadcast +=
ConfigurationChangedBroadcast;
connectionMultiplexer.ConnectionFailed +=
ConnectionFailed;
connectionMultiplexer.ConnectionRestored +=
ConnectionRestored;
connectionMultiplexer.ErrorMessage +=
ErrorMessage;
connectionMultiplexer.HashSlotMoved +=
HashSlotMoved;
connectionMultiplexer.InternalError +=
InternalError;
_connectionMultiplexers[connectionString] =
connectionMultiplexer;
}
_connectionMultiplexer =
_connectionMultiplexers[connectionString];
}
}
}
return _connectionMultiplexer;
}
private static void ConfigurationChanged(
object sender, EndPointEventArgs e)
{
Console.WriteLine($"ConfigurationChanged");
// e.EndPoint
}
private static void ConfigurationChangedBroadcast(
object sender, EndPointEventArgs e)
{
Console.WriteLine($"ConfigurationChangedBroadcast");
}
private static void ConnectionFailed(
object sender, ConnectionFailedEventArgs e)
{
Console.WriteLine($"ConnectionFailed");
}
private static void ConnectionRestored(
object sender, ConnectionFailedEventArgs e)
{
Console.WriteLine($"ConnectionRestored");
}
private static void ErrorMessage(
object sender, RedisErrorEventArgs e)
{
Console.WriteLine($"ErrorMessage");
}
private static void HashSlotMoved(
object sender, HashSlotMovedEventArgs e)
{
Console.WriteLine($"HashSlotMoved");
}
private static void InternalError(
object sender, InternalErrorEventArgs e)
{
Console.WriteLine($"InternalError");
}
}
}
// Install-Package StackExchange.Redis
// Install-Package Newtonsoft.Json
转载于:https://www.cnblogs.com/xiaowangzhi/p/11409588.html
相关资源:StackExchange.Redis.dll