Skip to content

Commit ea7d7cd

Browse files
committed
feature: split for hybridcache
1 parent 3e583f7 commit ea7d7cd

File tree

60 files changed

+1662
-930
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1662
-930
lines changed

.github/workflows/publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
uses: actions/setup-dotnet@v4
2626
with:
2727
dotnet-version: 9
28-
- name: Build
29-
run: dotnet build -c Release
28+
- name: Pack
29+
run: dotnet pack -c Release
3030
- name: Publish
3131
run: dotnet nuget push "**/*.nupkg" -k ${{ secrets.NUGET_KEY }} -n -s https://api.nuget.org/v3/index.json --skip-duplicate

.vscode/launch.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations":
4+
[
5+
{
6+
"name": "MessagingRedisCache Lab",
7+
"type": "coreclr",
8+
"request": "launch",
9+
"preLaunchTask": "build",
10+
"program": "${workspaceFolder}/labs/MessagingRedisCache/bin/Debug/net9.0/MessagingRedisCache.Lab.dll",
11+
"args": [],
12+
"cwd": "${workspaceFolder}/labs/MessagingRedisCache",
13+
"stopAtEntry": false,
14+
"env":
15+
{
16+
"ASPNETCORE_ENVIRONMENT": "Development"
17+
}
18+
}
19+
]
20+
}

Directory.Build.props

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Project>
2+
<PropertyGroup>
3+
<AnalysisLevel>latest-all</AnalysisLevel>
4+
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
5+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<LangVersion>latest</LangVersion>
8+
<Nullable>enable</Nullable>
9+
<RepositoryType>git</RepositoryType>
10+
<RepositoryUrl>https://github.com/null-d3v/L1L2RedisCache.git</RepositoryUrl>
11+
</PropertyGroup>
12+
</Project>

Directory.Packages.props

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<Project>
2+
<PropertyGroup>
3+
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
4+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
8+
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
9+
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.0" />
10+
<PackageVersion Include="Microsoft.Extensions.Caching.Hybrid" Version="9.0.0-preview.9.24556.5" />
11+
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.0" />
12+
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0" />
13+
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0" />
14+
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
15+
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
16+
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.0" />
17+
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.0" />
18+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
19+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
20+
<PackageVersion Include="MSTest.TestAdapter" Version="3.6.4" />
21+
<PackageVersion Include="MSTest.TestFramework" Version="3.6.4" />
22+
<PackageVersion Include="NSubstitute" Version="5.3.0" />
23+
</ItemGroup>
24+
</Project>

L1L2RedisCache.sln

Lines changed: 69 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,25 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
44
VisualStudioVersion = 15.0.26124.0
55
MinimumVisualStudioVersion = 15.0.26124.0
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache", "src\L1L2RedisCache.csproj", "{71A8453B-1A5E-49ED-A9A2-17B7DC9A7407}"
6+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FEEBBE29-BAE7-4407-95D5-EB1F56F6BDA3}"
77
EndProject
8-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{79FE29CD-A4E5-46BB-9FC8-5EC921CFE5F3}"
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache", "src\L1L2RedisCache\L1L2RedisCache.csproj", "{9C09D590-3186-4E27-8103-66C2D6CAFDF2}"
99
EndProject
10-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache.Tests.Unit", "tests\Unit\L1L2RedisCache.Tests.Unit.csproj", "{8791FCF7-078D-44A5-AC59-C7C2CE469D3F}"
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagingRedisCache", "src\MessagingRedisCache\MessagingRedisCache.csproj", "{71A8453B-1A5E-49ED-A9A2-17B7DC9A7407}"
1111
EndProject
12-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache.Tests.System", "tests\System\L1L2RedisCache.Tests.System.csproj", "{6A825E82-5BF4-43A0-BA08-9CB000FB232A}"
12+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{E6F22576-963C-4CE3-A653-FBC7DEA5F10A}"
13+
EndProject
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache.Tests.System", "tests\MessagingRedisCache\System\MessagingRedisCache.Tests.System.csproj", "{DF934775-FF05-462D-8514-497F68BB8A45}"
15+
EndProject
16+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache.Tests.Unit", "tests\MessagingRedisCache\Unit\MessagingRedisCache.Tests.Unit.csproj", "{8791FCF7-078D-44A5-AC59-C7C2CE469D3F}"
17+
EndProject
18+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "L1L2RedisCache", "L1L2RedisCache", "{E4234EE7-DAAE-40F5-A24F-14C9C2B5F9BD}"
19+
EndProject
20+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "L1L2RedisCache.Tests.System", "tests\L1L2RedisCache\System\L1L2RedisCache.Tests.System.csproj", "{2BA929A4-78E0-4C29-A676-1F5339C99245}"
21+
EndProject
22+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "labs", "labs", "{3E40FF50-EE26-49F6-81B8-94DE4CC9BDF2}"
23+
EndProject
24+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagingRedisCache.Lab", "labs\MessagingRedisCache\MessagingRedisCache.Lab.csproj", "{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}"
1325
EndProject
1426
Global
1527
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -48,20 +60,60 @@ Global
4860
{8791FCF7-078D-44A5-AC59-C7C2CE469D3F}.Release|x64.Build.0 = Release|Any CPU
4961
{8791FCF7-078D-44A5-AC59-C7C2CE469D3F}.Release|x86.ActiveCfg = Release|Any CPU
5062
{8791FCF7-078D-44A5-AC59-C7C2CE469D3F}.Release|x86.Build.0 = Release|Any CPU
51-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
52-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Debug|Any CPU.Build.0 = Debug|Any CPU
53-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Debug|x64.ActiveCfg = Debug|Any CPU
54-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Debug|x64.Build.0 = Debug|Any CPU
55-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Debug|x86.ActiveCfg = Debug|Any CPU
56-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Debug|x86.Build.0 = Debug|Any CPU
57-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Release|Any CPU.ActiveCfg = Release|Any CPU
58-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Release|Any CPU.Build.0 = Release|Any CPU
59-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Release|x64.ActiveCfg = Release|Any CPU
60-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Release|x64.Build.0 = Release|Any CPU
61-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Release|x86.ActiveCfg = Release|Any CPU
62-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A}.Release|x86.Build.0 = Release|Any CPU
63+
{DF934775-FF05-462D-8514-497F68BB8A45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
64+
{DF934775-FF05-462D-8514-497F68BB8A45}.Debug|Any CPU.Build.0 = Debug|Any CPU
65+
{DF934775-FF05-462D-8514-497F68BB8A45}.Debug|x64.ActiveCfg = Debug|Any CPU
66+
{DF934775-FF05-462D-8514-497F68BB8A45}.Debug|x64.Build.0 = Debug|Any CPU
67+
{DF934775-FF05-462D-8514-497F68BB8A45}.Debug|x86.ActiveCfg = Debug|Any CPU
68+
{DF934775-FF05-462D-8514-497F68BB8A45}.Debug|x86.Build.0 = Debug|Any CPU
69+
{DF934775-FF05-462D-8514-497F68BB8A45}.Release|Any CPU.ActiveCfg = Release|Any CPU
70+
{DF934775-FF05-462D-8514-497F68BB8A45}.Release|Any CPU.Build.0 = Release|Any CPU
71+
{DF934775-FF05-462D-8514-497F68BB8A45}.Release|x64.ActiveCfg = Release|Any CPU
72+
{DF934775-FF05-462D-8514-497F68BB8A45}.Release|x64.Build.0 = Release|Any CPU
73+
{DF934775-FF05-462D-8514-497F68BB8A45}.Release|x86.ActiveCfg = Release|Any CPU
74+
{DF934775-FF05-462D-8514-497F68BB8A45}.Release|x86.Build.0 = Release|Any CPU
75+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
76+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
77+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Debug|x64.ActiveCfg = Debug|Any CPU
78+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Debug|x64.Build.0 = Debug|Any CPU
79+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Debug|x86.ActiveCfg = Debug|Any CPU
80+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Debug|x86.Build.0 = Debug|Any CPU
81+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
82+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Release|Any CPU.Build.0 = Release|Any CPU
83+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Release|x64.ActiveCfg = Release|Any CPU
84+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Release|x64.Build.0 = Release|Any CPU
85+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Release|x86.ActiveCfg = Release|Any CPU
86+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2}.Release|x86.Build.0 = Release|Any CPU
87+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
88+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Debug|Any CPU.Build.0 = Debug|Any CPU
89+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Debug|x64.ActiveCfg = Debug|Any CPU
90+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Debug|x64.Build.0 = Debug|Any CPU
91+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Debug|x86.ActiveCfg = Debug|Any CPU
92+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Debug|x86.Build.0 = Debug|Any CPU
93+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Release|Any CPU.ActiveCfg = Release|Any CPU
94+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Release|Any CPU.Build.0 = Release|Any CPU
95+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Release|x64.ActiveCfg = Release|Any CPU
96+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Release|x64.Build.0 = Release|Any CPU
97+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Release|x86.ActiveCfg = Release|Any CPU
98+
{2BA929A4-78E0-4C29-A676-1F5339C99245}.Release|x86.Build.0 = Release|Any CPU
99+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
100+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
101+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Debug|x64.ActiveCfg = Debug|Any CPU
102+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Debug|x64.Build.0 = Debug|Any CPU
103+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Debug|x86.ActiveCfg = Debug|Any CPU
104+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Debug|x86.Build.0 = Debug|Any CPU
105+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
106+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Release|Any CPU.Build.0 = Release|Any CPU
107+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Release|x64.ActiveCfg = Release|Any CPU
108+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Release|x64.Build.0 = Release|Any CPU
109+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Release|x86.ActiveCfg = Release|Any CPU
110+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A}.Release|x86.Build.0 = Release|Any CPU
63111
EndGlobalSection
64112
GlobalSection(NestedProjects) = preSolution
65-
{6A825E82-5BF4-43A0-BA08-9CB000FB232A} = {79FE29CD-A4E5-46BB-9FC8-5EC921CFE5F3}
113+
{DF934775-FF05-462D-8514-497F68BB8A45} = {E6F22576-963C-4CE3-A653-FBC7DEA5F10A}
114+
{9C09D590-3186-4E27-8103-66C2D6CAFDF2} = {FEEBBE29-BAE7-4407-95D5-EB1F56F6BDA3}
115+
{E4234EE7-DAAE-40F5-A24F-14C9C2B5F9BD} = {E6F22576-963C-4CE3-A653-FBC7DEA5F10A}
116+
{2BA929A4-78E0-4C29-A676-1F5339C99245} = {E4234EE7-DAAE-40F5-A24F-14C9C2B5F9BD}
117+
{961D1C90-AD89-4F6F-BBB4-923D9F7C4F3A} = {3E40FF50-EE26-49F6-81B8-94DE4CC9BDF2}
66118
EndGlobalSection
67119
EndGlobal
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<NoWarn>EXTEXP0018;</NoWarn>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net9.0</TargetFramework>
6+
</PropertyGroup>
7+
<ItemGroup>
8+
<ProjectReference Include="..\..\src\MessagingRedisCache\MessagingRedisCache.csproj" />
9+
</ItemGroup>
10+
<ItemGroup>
11+
<PackageReference Include="Microsoft.Extensions.Caching.Hybrid" />
12+
<PackageReference Include="Microsoft.Extensions.Configuration" />
13+
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" />
14+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" />
15+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
16+
<PackageReference Include="Microsoft.Extensions.Logging" />
17+
<PackageReference Include="Microsoft.Extensions.Logging.Console" />
18+
</ItemGroup>
19+
</Project>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using Microsoft.Extensions.Caching.Hybrid;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Microsoft.Extensions.Logging;
4+
5+
var services = new ServiceCollection();
6+
services.AddLogging(builder => builder.AddConsole().AddFilter(null, LogLevel.Trace));
7+
services.AddHybridCache();
8+
services.AddMessagingRedisCache(options =>
9+
{
10+
options.Configuration = "redis";
11+
options.InstanceName = "MessagingRedisCache:Test:";
12+
});
13+
var serviceProvider = services.BuildServiceProvider();
14+
15+
var hybridCache = serviceProvider
16+
.GetRequiredService<HybridCache>();
17+
18+
var key = Guid.NewGuid().ToString();
19+
var value = Guid.NewGuid().ToString();
20+
21+
await hybridCache
22+
.SetAsync(
23+
key,
24+
value,
25+
new HybridCacheEntryOptions
26+
{
27+
Expiration = TimeSpan.FromHours(1),
28+
})
29+
.ConfigureAwait(false);
30+
31+
var testValue = await hybridCache
32+
.GetOrCreateAsync(
33+
key,
34+
cancellationToken =>
35+
ValueTask.FromResult<string?>(null))
36+
.ConfigureAwait(false);
37+
38+
var test = "";

src/Configuration/ServiceCollectionExtensions.cs

Lines changed: 0 additions & 104 deletions
This file was deleted.

src/L1L2RedisCache.csproj

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using MessagingRedisCache;
2+
using Microsoft.Extensions.Caching.Distributed;
3+
4+
namespace Microsoft.Extensions.DependencyInjection;
5+
6+
/// <summary>
7+
/// Extension methods for setting up L1L2RedisCache related services in an Microsoft.Extensions.DependencyInjection.IServiceCollection.
8+
/// </summary>
9+
public static class ServiceCollectionExtensions
10+
{
11+
/// <summary>
12+
/// Adds L1L2RedisCache distributed caching services to the specified <c>IServiceCollection</c>.
13+
/// </summary>
14+
/// <returns>The <c>IServiceCollection</c> so that additional calls can be chained.</returns>
15+
public static IServiceCollection AddL1L2RedisCache(
16+
this IServiceCollection services,
17+
Action<MessagingRedisCacheOptions> setupAction)
18+
{
19+
ArgumentNullException.ThrowIfNull(setupAction);
20+
21+
services
22+
.AddMessagingRedisCache(setupAction)
23+
.AddMemoryCacheSubscriber();
24+
services.AddSingleton<IDistributedCache, L1L2RedisCache.L1L2RedisCache>();
25+
services.AddMemoryCache();
26+
27+
return services;
28+
}
29+
}

0 commit comments

Comments
 (0)