Skip to content

Commit 2093c5a

Browse files
authored
Merge pull request #7 from wodsonluiz/improvement/factory
factory and update documentation
2 parents bf9de87 + 17f0a38 commit 2093c5a

File tree

6 files changed

+166
-41
lines changed

6 files changed

+166
-41
lines changed

.github/workflows/dotnet.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
runs-on: ${{matrix.os}}
2727
strategy:
2828
matrix:
29-
os: [windows-latest, ubuntu-latest]
29+
os: [windows-latest, ubuntu-latest, macos-latest]
3030

3131
steps:
3232
- name: "Checkout"
@@ -42,8 +42,6 @@ jobs:
4242
- name: "Dotnet Cake Build"
4343
run: dotnet cake --target=Build
4444
shell: pwsh
45-
- name: "Upload coverage to Codecov"
46-
uses: codecov/codecov-action@v3
4745
- name: "Dotnet Cake Pack"
4846
run: dotnet cake --target=Pack
4947
shell: pwsh

README-PTB.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Redis.EasyConnectMultiServers
2+
![Nuget](https://img.shields.io/nuget/dt/Redis.EasyConnectMultiServers)
3+
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/wodsonluiz/Redis.EasyConnectMultiServers/dotnet.yml)
4+
![Nuget](https://img.shields.io/nuget/v/Redis.EasyConnectMultiServers)
5+
6+
Biblioteca para facilitar a integração com multiplos servidores do Redis, assim sendo fácil realizar todas as operações de crud.
7+
8+
### Configuração
9+
- `AddRedisProviderMultiServers`: Injeta uma instância singleton de `IRedisProviderMultiServers`.
10+
- `IRedisProviderMultiServers` Abstração responsável por fornecer contratos que realiza as operações de CRUD em multiplos servidores
11+
12+
```csharp
13+
var configurations = new[]
14+
{
15+
new RedisConfiguration
16+
{
17+
AbortOnConnectFail = true,
18+
KeyPrefix = "MyPrefix__",
19+
Hosts = new[] { new RedisHost { Host = "localhost", Port = 6379 } },
20+
AllowAdmin = true,
21+
ConnectTimeout = 5000,
22+
Database = 0,
23+
PoolSize = 5,
24+
IsDefault = true
25+
},
26+
new RedisConfiguration
27+
{
28+
AbortOnConnectFail = true,
29+
KeyPrefix = "MyPrefix__",
30+
Hosts = new[] { new RedisHost { Host = "localhost", Port = 6389 } },
31+
AllowAdmin = true,
32+
ConnectTimeout = 5000,
33+
Database = 0,
34+
PoolSize = 2,
35+
Name = "Secndary Instance"
36+
}
37+
};
38+
39+
services.AddRedisProviderMultiServers(configurations);
40+
```
41+
42+
### Exemplo de uso
43+
44+
```csharp
45+
public class WeatherForecastController
46+
{
47+
private readonly IRedisProviderMultiServers _redisProviderMultiServers;
48+
49+
public WeatherForecastController(IRedisProviderMultiServers redisProviderMultiServers) =>
50+
_redisProviderMultiServers = redisProviderMultiServers;
51+
}
52+
```
53+
54+
#### Escrever/ Atualizar
55+
- Vai escrever em todos os sevidores configurados.
56+
57+
```csharp
58+
await _redisProviderMultiServers.AddAsync(Guid.NewGuid().ToString(), "value");
59+
```
60+
61+
```csharp
62+
await _redisProviderMultiServers.ReplaceAsync(Guid.NewGuid().ToString(), "value");
63+
```
64+
65+
- Vai escrever somente no servidor padrão: `IsDefault = true`
66+
67+
```csharp
68+
await _redisProviderMultiServers.AddDefaultClientAsync(Guid.NewGuid().ToString(), "value");
69+
```
70+
71+
```csharp
72+
await _redisProviderMultiServers.ReplaceDefaultClientAsync(Guid.NewGuid().ToString(), "value");
73+
```
74+
75+
#### Consulta
76+
- A consulta é realizada a partir do _client default_: `IsDefault = true`.
77+
- O método responde assim que encontra a chave, não seguindo com a consulta nos demais servidores.
78+
79+
```csharp
80+
await _redisProviderMultiServers.GetMultiAsync<string>(guid.ToString());
81+
```
82+
83+
#### Remover
84+
85+
- Vai remover em todos os servidores configurados
86+
- Vai remover somente no cliente padrão: `IsDefault = true`
87+
88+
```csharp
89+
await _redisProviderMultiServers.RemoveAsync(key);
90+
```
91+
92+
```csharp
93+
await _redisProviderMultiServers.RemoveDefaultClientAsync(key);
94+
```

README.md

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
# Redis.EasyConnectMultiServers
1+
# Redis.EasyConnectMultiServers
2+
23
![Nuget](https://img.shields.io/nuget/dt/Redis.EasyConnectMultiServers)
34
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/wodsonluiz/Redis.EasyConnectMultiServers/dotnet.yml)
45
![Nuget](https://img.shields.io/nuget/v/Redis.EasyConnectMultiServers)
56

6-
Biblioteca para facilitar e realizar todas as operações de CRUD em multiplos servidores do Redis.
7+
[PTBR Version](https://github.com/wodsonluiz/Redis.EasyConnectMultiServers/blob/main/README-PTB.md)
8+
9+
## Package for ease integration with multiple servers Redis. :package:
710

8-
### Setting
11+
### Configuration
12+
- `AddRedisProviderMultiServers`: Inject a singleton instance of `IRedisProviderMultiServers`.
13+
- `IRedisProviderMultiServers` Abstraction responsible for provider contracts that operations of CRUD in multiple servers
914

1015
```csharp
1116
var configurations = new[]
@@ -34,31 +39,59 @@ var configurations = new[]
3439
}
3540
};
3641

37-
services.AddRedisProviderMultiServers<SystemTextJsonSerializer>(configurations);
42+
services.AddRedisProviderMultiServers(configurations);
3843
```
3944

40-
### Example using
45+
### Exemple of use
4146

4247
```csharp
43-
public class WeatherForecastController : ControllerBase
48+
public class WeatherForecastController
4449
{
4550
private readonly IRedisProviderMultiServers _redisProviderMultiServers;
4651

47-
public WeatherForecastController(IRedisProviderMultiServers redisProviderMultiServers)
48-
{
52+
public WeatherForecastController(IRedisProviderMultiServers redisProviderMultiServers) =>
4953
_redisProviderMultiServers = redisProviderMultiServers;
50-
}
5154
}
55+
```
56+
57+
#### Write/ Replace
58+
- Write in all servers configured
5259

60+
```csharp
61+
await _redisProviderMultiServers.AddAsync(Guid.NewGuid().ToString(), "value");
62+
```
63+
64+
```csharp
65+
await _redisProviderMultiServers.ReplaceAsync(Guid.NewGuid().ToString(), "value");
5366
```
5467

55-
#### Add example
68+
- Write only in default server: `IsDefault = true`
5669

5770
```csharp
58-
await _redisProviderMultiServers.AddMultiAsync(Guid.NewGuid().ToString(), "value");
71+
await _redisProviderMultiServers.AddDefaultClientAsync(Guid.NewGuid().ToString(), "value");
5972
```
6073

61-
#### Get example
74+
```csharp
75+
await _redisProviderMultiServers.ReplaceDefaultClientAsync(Guid.NewGuid().ToString(), "value");
76+
```
77+
78+
#### Get
79+
- The get is performed from the _client default_: `IsDefault = true`.
80+
- The method responds as soon as it finds the key, not continuing with the get on other servers.
81+
6282
```csharp
6383
await _redisProviderMultiServers.GetMultiAsync<string>(guid.ToString());
64-
```
84+
```
85+
86+
#### Remove
87+
88+
- Remove in all servers configured
89+
- Remove only in default server: `IsDefault = true`
90+
91+
```csharp
92+
await _redisProviderMultiServers.RemoveAsync(key);
93+
```
94+
95+
```csharp
96+
await _redisProviderMultiServers.RemoveDefaultClientAsync(key);
97+
```

src/Redis.EasyConnectMultiServers/Abastractions/IRedisProviderMultiServers.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,62 +10,62 @@ public interface IRedisProviderMultiServers
1010
/// <summary>
1111
/// Write in multi databases
1212
/// </summary>
13-
Task<bool> AddMultiAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
13+
Task<bool> AddAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
1414

1515
/// <summary>
1616
/// Write in multi databases
1717
/// </summary>
18-
Task<bool> AddMultiAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
18+
Task<bool> AddAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
1919

2020
/// <summary>
2121
/// Write in default database
2222
/// </summary>
23-
Task<bool> AddDefaultAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
23+
Task<bool> AddDefaultClientAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
2424

2525
/// <summary>
2626
/// Write in default database
2727
/// </summary>
28-
Task<bool> AddDefaultAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
28+
Task<bool> AddDefaultClientAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null);
2929

3030
/// <summary>
3131
/// Replace in multi databases
3232
/// </summary>
33-
Task<bool> ReplaceMultiAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None);
33+
Task<bool> ReplaceAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None);
3434

3535
/// <summary>
3636
/// Replace in multi databases
3737
/// </summary>
38-
Task<bool> ReplaceMultiAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None);
38+
Task<bool> ReplaceAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None);
3939

4040
/// <summary>
4141
/// Replace in default database
4242
/// </summary>
43-
Task<bool> ReplaceDefaultAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None);
43+
Task<bool> ReplaceDefaultClientAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None);
4444

4545
/// <summary>
4646
/// Replace in default database
4747
/// </summary>
48-
Task<bool> ReplaceDefaultAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None);
48+
Task<bool> ReplaceDefaultClientAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None);
4949

5050
/// <summary>
5151
/// Replace in default database
5252
/// </summary>
53-
Task<bool> RemoveMultiAsync(string key, CommandFlags flags = CommandFlags.None);
53+
Task<bool> RemoveAsync(string key, CommandFlags flags = CommandFlags.None);
5454

5555
/// <summary>
5656
/// Remove in default database
5757
/// </summary>
58-
Task<bool> RemoveDefaultAsync(string key, CommandFlags flags = CommandFlags.None);
58+
Task<bool> RemoveDefaultClientAsync(string key, CommandFlags flags = CommandFlags.None);
5959

6060
/// <summary>
6161
/// Get in multi databases, first read default database
6262
/// </summary>
63-
Task<T> GetMultiAsync<T>(string key, CommandFlags flag = CommandFlags.None);
63+
Task<T> GetAsync<T>(string key, CommandFlags flag = CommandFlags.None);
6464

6565
/// <summary>
6666
/// Get in default database
6767
/// </summary>
68-
Task<T> GetDefaultAsync<T>(string key, CommandFlags flag = CommandFlags.None);
68+
Task<T> GetDefaultClientAsync<T>(string key, CommandFlags flag = CommandFlags.None);
6969

7070
}
7171
}

src/Redis.EasyConnectMultiServers/Implementations/RedisProviderMultiServers.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ public RedisProviderMultiServers(IRedisClientFactory factory)
1515
_databaseDefault = factory.GetDefaultRedisClient().GetDefaultDatabase();
1616
}
1717

18-
public Task<bool> AddDefaultAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null) =>
18+
public Task<bool> AddDefaultClientAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null) =>
1919
AddAsync<T>(_databaseDefault, key, value, when, flag, tags);
2020

2121

22-
public Task<bool> AddDefaultAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null) =>
22+
public Task<bool> AddDefaultClientAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null) =>
2323
AddAsync<T>(_databaseDefault, key, value, expiresIn, when, flag, tags);
2424

25-
public async Task<bool> AddMultiAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null)
25+
public async Task<bool> AddAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null)
2626
{
2727
var listTasks = new List<Task<bool>>();
2828

@@ -38,7 +38,7 @@ public async Task<bool> AddMultiAsync<T>(string key, T value, When when = When.A
3838
return listTasks.Any() && listTasks.All(x => x.Result);
3939
}
4040

41-
public async Task<bool> AddMultiAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null)
41+
public async Task<bool> AddAsync<T>(string key, T value, TimeSpan expiresIn, When when = When.Always, CommandFlags flag = CommandFlags.None, HashSet<string>? tags = null)
4242
{
4343
var listTasks = new List<Task<bool>>();
4444

@@ -54,10 +54,10 @@ public async Task<bool> AddMultiAsync<T>(string key, T value, TimeSpan expiresIn
5454
return listTasks.Any() && listTasks.All(x => x.Result);
5555
}
5656

57-
public async Task<T> GetDefaultAsync<T>(string key, CommandFlags flag = CommandFlags.None) =>
57+
public async Task<T> GetDefaultClientAsync<T>(string key, CommandFlags flag = CommandFlags.None) =>
5858
await GetAsync<T>(_databaseDefault, key, flag) ?? default!;
5959

60-
public async Task<T> GetMultiAsync<T>(string key, CommandFlags flag = CommandFlags.None)
60+
public async Task<T> GetAsync<T>(string key, CommandFlags flag = CommandFlags.None)
6161
{
6262
foreach (var client in _redisClients)
6363
{
@@ -70,10 +70,10 @@ public async Task<T> GetMultiAsync<T>(string key, CommandFlags flag = CommandFla
7070
return default!;
7171
}
7272

73-
public Task<bool> RemoveDefaultAsync(string key, CommandFlags flags = CommandFlags.None) =>
73+
public Task<bool> RemoveDefaultClientAsync(string key, CommandFlags flags = CommandFlags.None) =>
7474
RemoveAsync(_databaseDefault, key, flags);
7575

76-
public async Task<bool> RemoveMultiAsync(string key, CommandFlags flags = CommandFlags.None)
76+
public async Task<bool> RemoveAsync(string key, CommandFlags flags = CommandFlags.None)
7777
{
7878
var listTaks = new List<Task<bool>>();
7979

@@ -89,13 +89,13 @@ public async Task<bool> RemoveMultiAsync(string key, CommandFlags flags = Comman
8989
return listTaks.Any() && listTaks.All(x => x.Result);
9090
}
9191

92-
public Task<bool> ReplaceDefaultAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None) =>
92+
public Task<bool> ReplaceDefaultClientAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None) =>
9393
ReplaceAsync<T>(_databaseDefault, key, value, when, flag);
9494

95-
public Task<bool> ReplaceDefaultAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None) =>
95+
public Task<bool> ReplaceDefaultClientAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None) =>
9696
ReplaceAsync<T>(_databaseDefault, key, value, expiresAt, when, flag);
9797

98-
public async Task<bool> ReplaceMultiAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None)
98+
public async Task<bool> ReplaceAsync<T>(string key, T value, When when = When.Always, CommandFlags flag = CommandFlags.None)
9999
{
100100
var listTaks = new List<Task<bool>>();
101101

@@ -111,7 +111,7 @@ public async Task<bool> ReplaceMultiAsync<T>(string key, T value, When when = Wh
111111
return listTaks.Any() && listTaks.All(x => x.Result);
112112
}
113113

114-
public async Task<bool> ReplaceMultiAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None)
114+
public async Task<bool> ReplaceAsync<T>(string key, T value, DateTimeOffset expiresAt, When when = When.Always, CommandFlags flag = CommandFlags.None)
115115
{
116116
var listTaks = new List<Task<bool>>();
117117

src/Redis.EasyConnectMultiServers/Redis.EasyConnectMultiServers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<PropertyGroup Label="Package">
88
<Product>Redis.EasyConnectMultiServers</Product>
9-
<Description>Biblioteca para facilitar e realizar todas as operações de CRUD em multiplos servidores do Redis.</Description>
9+
<Description>Package for ease integration with multiple servers Redis</Description>
1010
<PackageTags>redis</PackageTags>
1111
<PackageReadmeFile>README.md</PackageReadmeFile>
1212
</PropertyGroup>

0 commit comments

Comments
 (0)