Skip to content

Commit 3f9e751

Browse files
authored
Merge pull request #79 from dotnetcore/dev
HybridCaching Provider
2 parents 89d4a66 + f03a0b1 commit 3f9e751

22 files changed

+437
-49
lines changed

EasyCaching.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyCaching.PerformanceTest
4747
EndProject
4848
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyCaching.CSRedis", "src\EasyCaching.CSRedis\EasyCaching.CSRedis.csproj", "{6584761E-E51C-408F-BE51-CA0F6269589B}"
4949
EndProject
50+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyCaching.Bus.CSRedis", "src\EasyCaching.Bus.CSRedis\EasyCaching.Bus.CSRedis.csproj", "{861E5373-BEF6-4AA2-92C7-8F4941A079E7}"
51+
EndProject
5052
Global
5153
GlobalSection(SolutionConfigurationPlatforms) = preSolution
5254
Debug|Any CPU = Debug|Any CPU
@@ -133,6 +135,10 @@ Global
133135
{6584761E-E51C-408F-BE51-CA0F6269589B}.Debug|Any CPU.Build.0 = Debug|Any CPU
134136
{6584761E-E51C-408F-BE51-CA0F6269589B}.Release|Any CPU.ActiveCfg = Release|Any CPU
135137
{6584761E-E51C-408F-BE51-CA0F6269589B}.Release|Any CPU.Build.0 = Release|Any CPU
138+
{861E5373-BEF6-4AA2-92C7-8F4941A079E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
139+
{861E5373-BEF6-4AA2-92C7-8F4941A079E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
140+
{861E5373-BEF6-4AA2-92C7-8F4941A079E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
141+
{861E5373-BEF6-4AA2-92C7-8F4941A079E7}.Release|Any CPU.Build.0 = Release|Any CPU
136142
EndGlobalSection
137143
GlobalSection(NestedProjects) = preSolution
138144
{CE61FAA2-0233-451C-991D-4222ED61C84B} = {A0F5CC7E-155F-4726-8DEB-E966950B3FE9}
@@ -155,5 +161,6 @@ Global
155161
{2A8D7103-DF64-47B6-A406-8F8559AF7E7F} = {EBB55F65-7D07-4281-8D5E-7B0CA88E1AD0}
156162
{6EBE36A2-F128-4C63-B90A-B700D8C2F2E8} = {EBB55F65-7D07-4281-8D5E-7B0CA88E1AD0}
157163
{6584761E-E51C-408F-BE51-CA0F6269589B} = {A0F5CC7E-155F-4726-8DEB-E966950B3FE9}
164+
{861E5373-BEF6-4AA2-92C7-8F4941A079E7} = {A0F5CC7E-155F-4726-8DEB-E966950B3FE9}
158165
EndGlobalSection
159166
EndGlobal

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2017-2018 CatcherWong
3+
Copyright (c) .NET Core Community and Contributors
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

build/releasenotes.props

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,53 @@
11
<Project>
22
<PropertyGroup>
3-
<EasyCachingCorePackageNotes>
4-
1. EasyCaching Bus
5-
2. HybridCaching
3+
<EasyCachingCorePackageNotes>
4+
1. HybridCaching add RemoveByPrefix/RemoveByPrefixAsync
5+
2. Add Bus Section Const value.
66
</EasyCachingCorePackageNotes>
77
<EasyCachingMemcachedPackageNotes>
8-
1. Adjust reference namespace.
8+
1. Update EasyCaching.Core.
99
</EasyCachingMemcachedPackageNotes>
1010
<EasyCachingRedisPackageNotes>
11-
1. Adjust reference namespace.
11+
1. Update EasyCaching.Core.
1212
</EasyCachingRedisPackageNotes>
1313
<EasyCachingSQLitePackageNotes>
14-
1. Adjust reference namespace.
14+
1. Update EasyCaching.Core.
15+
2. Update Default name of provider.
1516
</EasyCachingSQLitePackageNotes>
1617
<EasyCachingInMemoryPackageNotes>
17-
1. Adjust reference namespace.
18+
1. Update EasyCaching.Core.
1819
</EasyCachingInMemoryPackageNotes>
1920
<EasyCachingHybridPackageNotes>
20-
1. Refactor.
21+
1. HybridCaching add RemoveByPrefix/RemoveByPrefixAsync
2122
</EasyCachingHybridPackageNotes>
2223
<EasyCachingAspectCorePackageNotes>
23-
1. Adjust reference namespace.
24+
1. Update EasyCaching.Core.
2425
</EasyCachingAspectCorePackageNotes>
2526
<EasyCachingCastlePackageNotes>
26-
1. Adjust reference namespace.
27+
1. Update EasyCaching.Core.
2728
</EasyCachingCastlePackageNotes>
2829
<EasyCachingResponseCachingPackageNotes>
29-
1. Adjust reference namespace.
30+
1. Update EasyCaching.Core.
3031
</EasyCachingResponseCachingPackageNotes>
3132
<EasyCachingJsonPackageNotes>
32-
1. Adjust reference namespace.
33+
1. Update EasyCaching.Core.
3334
</EasyCachingJsonPackageNotes>
3435
<EasyCachingMessagePackPackageNotes>
35-
1. Adjust reference namespace.
36+
1. Update EasyCaching.Core.
3637
</EasyCachingMessagePackPackageNotes>
3738
<EasyCachingProtobufPackageNotes>
38-
1. Adjust reference namespace.
39+
1. Update EasyCaching.Core.
3940
</EasyCachingProtobufPackageNotes>
4041
<EasyCachingCSRedisPackageNotes>
41-
1. Adjust reference namespace.
42+
1. Update EasyCaching.Core.
4243
</EasyCachingCSRedisPackageNotes>
4344
<EasyCachingRedisBusPackageNotes>
44-
1. Init.
45+
1. Modify the default section name.
46+
2. Update EasyCaching.Core.
4547
</EasyCachingRedisBusPackageNotes>
4648
<EasyCachingRabbitBusPackageNotes>
47-
1. Init.
49+
1. Fixed Options Bug.
50+
2. Fixed Queue Bind Bug.
4851
</EasyCachingRabbitBusPackageNotes>
4952
</PropertyGroup>
5053
</Project>

build/version.props

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
<Project>
22
<PropertyGroup>
3-
<EasyCachingCorePackageVersion>0.5.0</EasyCachingCorePackageVersion>
4-
<EasyCachingMemcachedPackageVersion>0.5.0</EasyCachingMemcachedPackageVersion>
5-
<EasyCachingRedisPackageVersion>0.5.0</EasyCachingRedisPackageVersion>
6-
<EasyCachingSQLitePackageVersion>0.5.0</EasyCachingSQLitePackageVersion>
7-
<EasyCachingInMemoryPackageVersion>0.5.0</EasyCachingInMemoryPackageVersion>
8-
<EasyCachingHybridPackageVersion>0.5.0</EasyCachingHybridPackageVersion>
9-
<EasyCachingAspectCorePackageVersion>0.5.0</EasyCachingAspectCorePackageVersion>
10-
<EasyCachingCastlePackageVersion>0.5.0</EasyCachingCastlePackageVersion>
11-
<EasyCachingResponseCachingPackageVersion>0.5.0</EasyCachingResponseCachingPackageVersion>
12-
<EasyCachingJsonPackageVersion>0.5.0</EasyCachingJsonPackageVersion>
13-
<EasyCachingMessagePackPackageVersion>0.5.0</EasyCachingMessagePackPackageVersion>
14-
<EasyCachingProtobufPackageVersion>0.5.0</EasyCachingProtobufPackageVersion>
15-
<EasyCachingCSRedisPackageVersion>0.5.0</EasyCachingCSRedisPackageVersion>
16-
<EasyCachingRedisBusPackageVersion>0.5.0</EasyCachingRedisBusPackageVersion>
17-
<EasyCachingRabbitBusPackageVersion>0.5.0-alpha</EasyCachingRabbitBusPackageVersion>
3+
<EasyCachingCorePackageVersion>0.5.1</EasyCachingCorePackageVersion>
4+
<EasyCachingMemcachedPackageVersion>0.5.1</EasyCachingMemcachedPackageVersion>
5+
<EasyCachingRedisPackageVersion>0.5.1</EasyCachingRedisPackageVersion>
6+
<EasyCachingSQLitePackageVersion>0.5.1</EasyCachingSQLitePackageVersion>
7+
<EasyCachingInMemoryPackageVersion>0.5.1</EasyCachingInMemoryPackageVersion>
8+
<EasyCachingHybridPackageVersion>0.5.1</EasyCachingHybridPackageVersion>
9+
<EasyCachingAspectCorePackageVersion>0.5.1</EasyCachingAspectCorePackageVersion>
10+
<EasyCachingCastlePackageVersion>0.5.1</EasyCachingCastlePackageVersion>
11+
<EasyCachingResponseCachingPackageVersion>0.5.1</EasyCachingResponseCachingPackageVersion>
12+
<EasyCachingJsonPackageVersion>0.5.1</EasyCachingJsonPackageVersion>
13+
<EasyCachingMessagePackPackageVersion>0.5.1</EasyCachingMessagePackPackageVersion>
14+
<EasyCachingProtobufPackageVersion>0.5.1</EasyCachingProtobufPackageVersion>
15+
<EasyCachingCSRedisPackageVersion>0.5.1</EasyCachingCSRedisPackageVersion>
16+
<EasyCachingRedisBusPackageVersion>0.5.1</EasyCachingRedisBusPackageVersion>
17+
<EasyCachingCSRedisBusPackageVersion>0.5.1</EasyCachingCSRedisBusPackageVersion>
18+
<EasyCachingRabbitBusPackageVersion>0.5.1.1</EasyCachingRabbitBusPackageVersion>
1819
</PropertyGroup>
1920
</Project>

sample/EasyCaching.Demo.Providers/EasyCaching.Demo.Providers.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<ProjectReference Include="..\..\src\EasyCaching.HybridCache\EasyCaching.HybridCache.csproj" />
1717
<ProjectReference Include="..\..\src\EasyCaching.Serialization.MessagePack\EasyCaching.Serialization.MessagePack.csproj" />
1818
<ProjectReference Include="..\..\src\EasyCaching.Core\EasyCaching.Core.csproj" />
19+
<ProjectReference Include="..\..\src\EasyCaching.Bus.Redis\EasyCaching.Bus.Redis.csproj" />
1920
</ItemGroup>
2021
<ItemGroup>
2122
<None Remove="easycaching.db" />
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace EasyCaching.Bus.CSRedis
2+
{
3+
using System;
4+
using System.Collections.Generic;
5+
6+
/// <summary>
7+
/// Redis bus options.
8+
/// </summary>
9+
public class CSRedisBusOptions
10+
{
11+
/// <summary>
12+
/// Gets or sets the node rule.
13+
/// </summary>
14+
/// <value>The node rule.</value>
15+
public Func<string, string> NodeRule { get; set; } = null;
16+
17+
/// <summary>
18+
/// Gets or sets the connection strings.
19+
/// </summary>
20+
/// <value>The connection strings.</value>
21+
public List<string> ConnectionStrings { get; set; }
22+
}
23+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
namespace EasyCaching.Bus.CSRedis
2+
{
3+
using System;
4+
using EasyCaching.Core.Bus;
5+
using EasyCaching.Core.Configurations;
6+
using EasyCaching.Core.Serialization;
7+
using Microsoft.AspNetCore.Builder;
8+
using Microsoft.Extensions.DependencyInjection;
9+
using Microsoft.Extensions.DependencyInjection.Extensions;
10+
using Microsoft.Extensions.Options;
11+
12+
/// <summary>
13+
/// Redis options extension.
14+
/// </summary>
15+
internal sealed class CSRedisOptionsExtension : IEasyCachingOptionsExtension
16+
{
17+
/// <summary>
18+
/// The name.
19+
/// </summary>
20+
private const string _name = "easycachingbus";
21+
22+
/// <summary>
23+
/// The configure.
24+
/// </summary>
25+
private readonly Action<CSRedisBusOptions> _configure;
26+
27+
/// <summary>
28+
/// Initializes a new instance of the <see cref="T:EasyCaching.CSRedis.RedisOptionsExtension"/> class.
29+
/// </summary>
30+
/// <param name="name">Name.</param>
31+
/// <param name="configure">Configure.</param>
32+
public CSRedisOptionsExtension(Action<CSRedisBusOptions> configure)
33+
{
34+
this._configure = configure;
35+
}
36+
37+
/// <summary>
38+
/// Adds the services.
39+
/// </summary>
40+
/// <param name="services">Services.</param>
41+
public void AddServices(IServiceCollection services)
42+
{
43+
services.AddOptions();
44+
45+
services.TryAddSingleton<IEasyCachingSerializer, DefaultBinaryFormatterSerializer>();
46+
47+
services.Configure(_name, _configure);
48+
49+
services.AddSingleton<EasyCachingCSRedisClient>(x =>
50+
{
51+
var optionsMon = x.GetRequiredService<IOptionsMonitor<CSRedisBusOptions>>();
52+
var options = optionsMon.Get(_name);
53+
54+
var conns = options.ConnectionStrings;
55+
var rule = options.NodeRule;
56+
57+
if (conns.Count == 1)
58+
{
59+
var redisClient = new EasyCachingCSRedisClient(_name, conns[0]);
60+
return redisClient;
61+
}
62+
else
63+
{
64+
var redisClient = new EasyCachingCSRedisClient(_name, rule, conns.ToArray());
65+
return redisClient;
66+
}
67+
});
68+
69+
services.AddSingleton<IEasyCachingBus, DefaultCSRedisBus>();
70+
}
71+
72+
/// <summary>
73+
/// Withs the services.
74+
/// </summary>
75+
/// <param name="services">Services.</param>
76+
public void WithServices(IApplicationBuilder services)
77+
{
78+
// Method intentionally left empty.
79+
}
80+
}
81+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace EasyCaching.Bus.CSRedis
2+
{
3+
using System;
4+
using global::CSRedis;
5+
6+
public class EasyCachingCSRedisClient : CSRedisClient
7+
{
8+
private readonly string _name;
9+
10+
public string Name { get { return this._name; } }
11+
12+
public EasyCachingCSRedisClient(string name, string connectionString)
13+
: base(connectionString)
14+
{
15+
this._name = name;
16+
}
17+
18+
public EasyCachingCSRedisClient(string name, Func<string, string> NodeRule, params string[] connectionStrings)
19+
: base(NodeRule, connectionStrings)
20+
{
21+
this._name = name;
22+
}
23+
}
24+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
namespace EasyCaching.Bus.CSRedis
2+
{
3+
using System;
4+
using EasyCaching.Core;
5+
using EasyCaching.Core.Configurations;
6+
using Microsoft.Extensions.Configuration;
7+
8+
/// <summary>
9+
/// EasyCaching options extensions.
10+
/// </summary>
11+
public static class EasyCachingOptionsExtensions
12+
{
13+
/// <summary>
14+
/// Withs the redis bus.
15+
/// </summary>
16+
/// <returns>The redis bus.</returns>
17+
/// <param name="options">Options.</param>
18+
/// <param name="configure">Configure.</param>
19+
public static EasyCachingOptions WithCSRedisBus(this EasyCachingOptions options, Action<CSRedisBusOptions> configure)
20+
{
21+
if (configure == null)
22+
{
23+
throw new ArgumentNullException(nameof(configure));
24+
}
25+
26+
options.RegisterExtension(new CSRedisOptionsExtension(configure));
27+
return options;
28+
}
29+
30+
/// <summary>
31+
/// Withs the redis bus.
32+
/// </summary>
33+
/// <returns>The redis bus.</returns>
34+
/// <param name="options">Options.</param>
35+
/// <param name="configuration">Configuration.</param>
36+
/// <param name="sectionName">Section name.</param>
37+
public static EasyCachingOptions WithCSRedisBus(this EasyCachingOptions options, IConfiguration configuration, string sectionName = EasyCachingConstValue.RedisBusSection)
38+
{
39+
var dbConfig = configuration.GetSection(sectionName);
40+
var redisOptions = new CSRedisBusOptions();
41+
dbConfig.Bind(redisOptions);
42+
43+
void configure(CSRedisBusOptions x)
44+
{
45+
x.ConnectionStrings = redisOptions.ConnectionStrings;
46+
}
47+
48+
options.RegisterExtension(new CSRedisOptionsExtension(configure));
49+
return options;
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)