Skip to content

Commit c1d61c9

Browse files
committed
Using System.Text.Json
1 parent 947fd48 commit c1d61c9

File tree

8 files changed

+156
-52
lines changed

8 files changed

+156
-52
lines changed

PerformanceTest/Base.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,52 @@ public void Initialize(Benchmark benchmark)
6060

6161
protected static IDatabase RedisDB;
6262
}
63+
64+
public abstract class FreeRedisBase : IExample
65+
{
66+
public void Dispose()
67+
{
68+
69+
}
70+
71+
public virtual Task Execute()
72+
{
73+
return Task.CompletedTask;
74+
}
75+
76+
public void Initialize(Benchmark benchmark)
77+
{
78+
if (cli == null)
79+
{
80+
cli = new FreeRedis.RedisClient($"{Program.Host}:6379,min poolsize=10");
81+
}
82+
}
83+
84+
public static FreeRedis.RedisClient cli;
85+
}
86+
87+
public abstract class NewLifeRedisBase : IExample
88+
{
89+
public void Dispose()
90+
{
91+
92+
}
93+
94+
public virtual Task Execute()
95+
{
96+
return Task.CompletedTask;
97+
}
98+
99+
public void Initialize(Benchmark benchmark)
100+
{
101+
if (cli == null)
102+
{
103+
cli = new NewLife.Caching.Redis($"{Program.Host}:6379", null, 0);
104+
}
105+
}
106+
107+
public static NewLife.Caching.Redis cli;
108+
109+
}
110+
63111
}

PerformanceTest/GET_JSON.cs

Lines changed: 64 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,40 +34,40 @@ public async override Task Execute()
3434

3535

3636
[System.ComponentModel.Category("Redis.Get")]
37-
public class StackExchange_AsyncGet :StackExchangeBase
37+
public class StackExchange_AsyncGet : StackExchangeBase
3838
{
3939
public async override Task Execute()
4040
{
4141
var i = OrderHelper.GetOrderID();
42-
var data= await RedisDB.StringGetAsync(i.ToString());
43-
var item = Newtonsoft.Json.JsonConvert.DeserializeObject<Northwind.Data.Order>(data);
42+
var data = await RedisDB.StringGetAsync(i.ToString());
43+
var item = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(data);
4444
}
4545
}
4646

4747
[System.ComponentModel.Category("Redis.MGet")]
48-
public class StackExchange_AsyncMGet :StackExchangeBase
48+
public class StackExchange_AsyncMGet : StackExchangeBase
4949
{
5050
public async override Task Execute()
5151
{
5252
var i = OrderHelper.GetOrderID();
5353
var values = await RedisDB.StringGetAsync(new RedisKey[] { i.ToString(), (i + 1).ToString() });
5454
object item1, item2;
5555
if (!values[0].IsNullOrEmpty)
56-
item1 = Newtonsoft.Json.JsonConvert.DeserializeObject(values[0], typeof(Northwind.Data.Order));
56+
item1 = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(values[0]);
5757
if (!values[1].IsNullOrEmpty)
58-
item2 = Newtonsoft.Json.JsonConvert.DeserializeObject(values[1], typeof(Northwind.Data.Order));
58+
item2 = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(values[1]);
5959
}
6060

6161
}
6262

6363
[System.ComponentModel.Category("Redis.Get")]
64-
public class StackExchange_SyncGet :StackExchangeBase
64+
public class StackExchange_SyncGet : StackExchangeBase
6565
{
6666
public override Task Execute()
6767
{
6868
var i = OrderHelper.GetOrderID();
6969
var data = RedisDB.StringGet(i.ToString());
70-
var item = Newtonsoft.Json.JsonConvert.DeserializeObject<Northwind.Data.Order>(data);
70+
var item = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(data);
7171
return base.Execute();
7272
}
7373
}
@@ -81,11 +81,65 @@ public override Task Execute()
8181
var values = RedisDB.StringGet(new RedisKey[] { i.ToString(), (i + 1).ToString() });
8282
object item1, item2;
8383
if (!values[0].IsNullOrEmpty)
84-
item1 = Newtonsoft.Json.JsonConvert.DeserializeObject(values[0], typeof(Northwind.Data.Order));
84+
item1 = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(values[0]);
8585
if (!values[1].IsNullOrEmpty)
86-
item2 = Newtonsoft.Json.JsonConvert.DeserializeObject(values[1], typeof(Northwind.Data.Order));
86+
item2 = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(values[1]);
8787
return base.Execute();
8888
}
8989
}
9090

91+
92+
[System.ComponentModel.Category("Redis.Get")]
93+
public class FreeRedis_Get : FreeRedisBase
94+
{
95+
public override Task Execute()
96+
{
97+
var i = OrderHelper.GetOrderID();
98+
var data = cli.Get(i.ToString());
99+
var item = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(data);
100+
return base.Execute();
101+
}
102+
}
103+
104+
[System.ComponentModel.Category("Redis.MGet")]
105+
public class FreeRedis_MGet : FreeRedisBase
106+
{
107+
public override Task Execute()
108+
{
109+
var i = OrderHelper.GetOrderID();
110+
var values = cli.MGet(i.ToString(), (i + 1).ToString());
111+
object item1, item2;
112+
if (!string.IsNullOrEmpty(values[0]))
113+
item1 = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(values[0]);
114+
if (!string.IsNullOrEmpty(values[1]))
115+
item2 = System.Text.Json.JsonSerializer.Deserialize<Northwind.Data.Order>(values[1]);
116+
return base.Execute();
117+
}
118+
119+
}
120+
121+
122+
[System.ComponentModel.Category("Redis.Get")]
123+
public class NewLife_Get : NewLifeRedisBase
124+
{
125+
public override Task Execute()
126+
{
127+
var i = OrderHelper.GetOrderID();
128+
var data = cli.Get<Northwind.Data.Order>(i.ToString());
129+
return base.Execute();
130+
}
131+
}
132+
133+
[System.ComponentModel.Category("Redis.MGet")]
134+
public class NewLife_MGet : NewLifeRedisBase
135+
{
136+
public override Task Execute()
137+
{
138+
var i = OrderHelper.GetOrderID();
139+
var values = cli.GetAll<Northwind.Data.Order>(new string[] { i.ToString(), (i + 1).ToString() });
140+
return base.Execute();
141+
}
142+
143+
}
144+
91145
}

PerformanceTest/PerformanceTest.csproj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>netcoreapp2.1</TargetFramework>
5+
<TargetFramework>net5.0</TargetFramework>
66
<ServerGarbageCollection>true</ServerGarbageCollection>
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="BeetleX.CodeBenchmark" Version="1.0.8" />
11-
<PackageReference Include="BeetleX.Redis" Version="0.7.0" />
12-
<PackageReference Include="Northwind.Data" Version="1.0.0" />
13-
<PackageReference Include="StackExchange.Redis" Version="2.0.571" />
10+
<PackageReference Include="BeetleX.CodeBenchmark" Version="1.1.1" />
11+
<PackageReference Include="BeetleX.Redis" Version="1.2.1" />
12+
<PackageReference Include="FreeRedis" Version="0.3.5" />
13+
<PackageReference Include="NewLife.Redis" Version="3.9.2021.407" />
14+
<PackageReference Include="Northwind.Data" Version="1.2.3" />
15+
<PackageReference Include="StackExchange.Redis" Version="2.2.4" />
1416
</ItemGroup>
1517

1618
<ItemGroup>

PerformanceTest/SET_JSON.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace PerformanceTest
99
{
1010
[System.ComponentModel.Category("Redis.Set")]
11-
public class BeetleX_Set:BeetleX_Base
11+
public class BeetleX_Set : BeetleX_Base
1212
{
1313
public async override Task Execute()
1414
{
@@ -22,17 +22,39 @@ public class StackExchange_AsyncSet : StackExchangeBase
2222
public async override Task Execute()
2323
{
2424
var item = OrderHelper.GetOrder();
25-
await RedisDB.StringSetAsync(item.OrderID.ToString(), Newtonsoft.Json.JsonConvert.SerializeObject(item));
25+
await RedisDB.StringSetAsync(item.OrderID.ToString(), System.Text.Json.JsonSerializer.Serialize(item));
2626
}
2727
}
2828
[System.ComponentModel.Category("Redis.Set")]
29-
public class StackExchange_SyncSet:StackExchangeBase
29+
public class StackExchange_SyncSet : StackExchangeBase
3030
{
3131
public override Task Execute()
3232
{
3333
var item = OrderHelper.GetOrder();
34-
RedisDB.StringSet(item.OrderID.ToString(), Newtonsoft.Json.JsonConvert.SerializeObject(item));
34+
RedisDB.StringSet(item.OrderID.ToString(), System.Text.Json.JsonSerializer.Serialize(item));
3535
return base.Execute();
3636
}
3737
}
38+
39+
[System.ComponentModel.Category("Redis.Set")]
40+
public class FreeRedis_Set : FreeRedisBase
41+
{
42+
public override Task Execute()
43+
{
44+
var item = OrderHelper.GetOrder();
45+
cli.Set(item.OrderID.ToString(), System.Text.Json.JsonSerializer.Serialize(item));
46+
return base.Execute();
47+
}
48+
}
49+
50+
//[System.ComponentModel.Category("Redis.Set")]
51+
//public class NewLife_Set : NewLifeRedisBase
52+
//{
53+
// public override Task Execute()
54+
// {
55+
// var item = OrderHelper.GetOrder();
56+
// cli.Set<Northwind.Data.Order>(item.OrderID.ToString(), item);
57+
// return base.Execute();
58+
// }
59+
//}
3860
}

src/BeetleX.Redis.csproj

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>netcoreapp2.1;netcoreapp3.1</TargetFrameworks>
5-
<Version>1.2</Version>
5+
<Version>1.2.4</Version>
66
<Company>beetlex.io</Company>
77
<Authors>henryfan</Authors>
88
<Copyright>Copyright © beetlex.io 2019-2021</Copyright>
@@ -22,6 +22,7 @@
2222
<PackageReference Include="MessagePack" Version="2.1.115" />
2323
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
2424
<PackageReference Include="protobuf-net" Version="2.4.6" />
25+
<PackageReference Include="System.Text.Json" Version="5.0.2" />
2526
</ItemGroup>
2627

2728
<ItemGroup>
@@ -30,17 +31,6 @@
3031
<PackagePath></PackagePath>
3132
</None>
3233
</ItemGroup>
33-
34-
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1'">
35-
<PackageReference Include="SpanJson">
36-
<Version>2.0.7</Version>
37-
</PackageReference>
38-
</ItemGroup>
3934

40-
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
41-
<PackageReference Include="SpanJson">
42-
<Version>3.0.1</Version>
43-
</PackageReference>
44-
</ItemGroup>
4535

4636
</Project>

src/RedisClient.cs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public RedisClient(bool ssl, string host, int port = 6379)
1515
Host = host;
1616
if (ssl)
1717
{
18-
18+
1919
TcpClient = BeetleX.SocketFactory.CreateSslClient<AsyncTcpClient>(host, port, "beetlex");
2020
TcpClient.CertificateValidationCallback = (o, e, f, d) =>
2121
{
@@ -100,11 +100,7 @@ public object DeserializeJsonObject(System.IO.Stream steram, int length, Type ty
100100
length -= len;
101101
}
102102
Memory.Position = 0;
103-
//JsonSerializer jsonSerializer = JsonSerializer.CreateDefault();
104-
//object result = jsonSerializer.Deserialize(StreamReader, type);
105-
//return result;
106-
var task = SpanJson.JsonSerializer.NonGeneric.Utf8.DeserializeAsync(Memory, type).AsTask();
107-
task.Wait();
103+
var task = System.Text.Json.JsonSerializer.DeserializeAsync(Memory, type);
108104
return task.Result;
109105

110106
}
@@ -119,21 +115,8 @@ public object DeserializeJsonObject(System.IO.Stream steram, int length, Type ty
119115

120116
public ArraySegment<byte> SerializeJsonObject(Object data)
121117
{
122-
var task = SpanJson.JsonSerializer.NonGeneric.Utf8.SerializeAsync(data, Memory).AsTask();
123-
task.Wait();
118+
System.Text.Json.JsonSerializer.SerializeAsync(Memory, data);
124119
return GetBuffer();
125-
//try
126-
//{
127-
// JsonSerializer jsonSerializer = JsonSerializer.CreateDefault();
128-
// jsonSerializer.Serialize(StreamWriter, data, data.GetType());
129-
// StreamWriter.Flush();
130-
// return GetBuffer();
131-
//}
132-
//catch (Exception e_)
133-
//{
134-
// InitStream();
135-
// throw new RedisException($"json serialize error {e_.Message}", e_);
136-
//}
137120
}
138121

139122
public object DeserializeProtobufObject(System.IO.Stream stream, int length, Type type)

src/RedisRequest.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,10 @@ public virtual void OnCompleted(ResultType type, string message)
366366
}
367367
else
368368
{
369-
ResultDispatch.DispatchCenter.Enqueue(this, 3);
369+
if (ResultDispatch.UseDispatch)
370+
ResultDispatch.DispatchCenter.Enqueue(this, 3);
371+
else
372+
TaskCompletion();
370373
}
371374

372375

src/ResultDispatch.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ namespace BeetleX.Redis
77
{
88
public class ResultDispatch
99
{
10+
public static bool UseDispatch { get; set; } = false;
11+
1012
static ResultDispatch()
1113
{
1214
DispatchCenter = new DispatchCenter<RedisRequest>(OnExecute);

0 commit comments

Comments
 (0)