Skip to content

Commit 6e47794

Browse files
authored
Merge pull request #195 from dotnetcore/dev
Redis provider string support nx and xx
2 parents 934c31c + e6ccccf commit 6e47794

File tree

6 files changed

+198
-87
lines changed

6 files changed

+198
-87
lines changed

build/releasenotes.props

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,55 @@
11
<Project>
2-
<PropertyGroup>
3-
<EasyCachingCorePackageNotes>
4-
1. Upgrading dependencies.
5-
</EasyCachingCorePackageNotes>
6-
<EasyCachingMemcachedPackageNotes>
7-
1. Upgrading dependencies.
8-
</EasyCachingMemcachedPackageNotes>
9-
<EasyCachingRedisPackageNotes>
10-
1. Upgrading dependencies.
11-
</EasyCachingRedisPackageNotes>
12-
<EasyCachingSQLitePackageNotes>
13-
1. Upgrading dependencies.
14-
</EasyCachingSQLitePackageNotes>
15-
<EasyCachingInMemoryPackageNotes>
16-
1. Upgrading dependencies.
17-
</EasyCachingInMemoryPackageNotes>
18-
<EasyCachingHybridPackageNotes>
19-
1. Upgrading dependencies.
20-
</EasyCachingHybridPackageNotes>
21-
<EasyCachingAspectCorePackageNotes>
22-
1. Upgrading dependencies.
23-
</EasyCachingAspectCorePackageNotes>
24-
<EasyCachingCastlePackageNotes>
25-
1. Upgrading dependencies.
26-
</EasyCachingCastlePackageNotes>
27-
<EasyCachingResponseCachingPackageNotes>
28-
1. Upgrading dependencies.
29-
</EasyCachingResponseCachingPackageNotes>
30-
<EasyCachingJsonPackageNotes>
31-
1. Upgrading dependencies.
32-
</EasyCachingJsonPackageNotes>
33-
<EasyCachingMessagePackPackageNotes>
34-
1. Upgrading dependencies.
35-
</EasyCachingMessagePackPackageNotes>
36-
<EasyCachingProtobufPackageNotes>
37-
1. Upgrading dependencies.
38-
</EasyCachingProtobufPackageNotes>
39-
<EasyCachingCSRedisPackageNotes>
40-
1. Upgrading dependencies.
41-
</EasyCachingCSRedisPackageNotes>
42-
<EasyCachingCSRedisBusPackageNotes>
43-
1. Upgrading dependencies.
44-
</EasyCachingCSRedisBusPackageNotes>
45-
<EasyCachingRedisBusPackageNotes>
46-
1. Upgrading dependencies.
47-
</EasyCachingRedisBusPackageNotes>
48-
<EasyCachingRabbitBusPackageNotes>
49-
1. Upgrading dependencies.
50-
</EasyCachingRabbitBusPackageNotes>
51-
<EasyCachingDiskPackageNotes>
52-
1. Upgrading dependencies.
53-
</EasyCachingDiskPackageNotes>
54-
</PropertyGroup>
2+
<PropertyGroup>
3+
<EasyCachingCorePackageNotes>
4+
1. Redis provider string support nx and xx.
5+
</EasyCachingCorePackageNotes>
6+
<EasyCachingMemcachedPackageNotes>
7+
1. Upgrading dependencies.
8+
</EasyCachingMemcachedPackageNotes>
9+
<EasyCachingRedisPackageNotes>
10+
1. Redis provider string support nx and xx.
11+
</EasyCachingRedisPackageNotes>
12+
<EasyCachingSQLitePackageNotes>
13+
1. Upgrading dependencies.
14+
</EasyCachingSQLitePackageNotes>
15+
<EasyCachingInMemoryPackageNotes>
16+
1. Upgrading dependencies.
17+
</EasyCachingInMemoryPackageNotes>
18+
<EasyCachingHybridPackageNotes>
19+
1. Upgrading dependencies.
20+
</EasyCachingHybridPackageNotes>
21+
<EasyCachingAspectCorePackageNotes>
22+
1. Upgrading dependencies.
23+
</EasyCachingAspectCorePackageNotes>
24+
<EasyCachingCastlePackageNotes>
25+
1. Upgrading dependencies.
26+
</EasyCachingCastlePackageNotes>
27+
<EasyCachingResponseCachingPackageNotes>
28+
1. Upgrading dependencies.
29+
</EasyCachingResponseCachingPackageNotes>
30+
<EasyCachingJsonPackageNotes>
31+
1. Upgrading dependencies.
32+
</EasyCachingJsonPackageNotes>
33+
<EasyCachingMessagePackPackageNotes>
34+
1. Upgrading dependencies.
35+
</EasyCachingMessagePackPackageNotes>
36+
<EasyCachingProtobufPackageNotes>
37+
1. Upgrading dependencies.
38+
</EasyCachingProtobufPackageNotes>
39+
<EasyCachingCSRedisPackageNotes>
40+
1. Redis provider string support nx and xx.
41+
</EasyCachingCSRedisPackageNotes>
42+
<EasyCachingCSRedisBusPackageNotes>
43+
1. Upgrading dependencies.
44+
</EasyCachingCSRedisBusPackageNotes>
45+
<EasyCachingRedisBusPackageNotes>
46+
1. Upgrading dependencies.
47+
</EasyCachingRedisBusPackageNotes>
48+
<EasyCachingRabbitBusPackageNotes>
49+
1. Upgrading dependencies.
50+
</EasyCachingRabbitBusPackageNotes>
51+
<EasyCachingDiskPackageNotes>
52+
1. Upgrading dependencies.
53+
</EasyCachingDiskPackageNotes>
54+
</PropertyGroup>
5555
</Project>

build/version.props

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

src/EasyCaching.CSRedis/DefaultCSRedisCachingProvider.String.cs

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace EasyCaching.CSRedis
22
{
33
using EasyCaching.Core;
4+
using global::CSRedis;
45
using System.Threading.Tasks;
56

67
public partial class DefaultCSRedisCachingProvider : IRedisCachingProvider
@@ -37,47 +38,69 @@ public async Task<double> IncrByFloatAsync(string cacheKey, double value = 1)
3738
return res;
3839
}
3940

40-
public bool StringSet(string cacheKey, string cacheValue, System.TimeSpan? expiration)
41+
public bool StringSet(string cacheKey, string cacheValue, System.TimeSpan? expiration, string when)
4142
{
4243
ArgumentCheck.NotNullOrWhiteSpace(cacheKey, nameof(cacheKey));
4344

4445
bool flag = false;
4546

47+
RedisExistence? exists = null;
48+
49+
if (when.Equals("nx", System.StringComparison.OrdinalIgnoreCase))
50+
{
51+
exists = RedisExistence.Nx;
52+
}
53+
else if (when.Equals("xx", System.StringComparison.OrdinalIgnoreCase))
54+
{
55+
exists = RedisExistence.Xx;
56+
}
57+
4658
if (expiration.HasValue)
4759
{
48-
flag = _cache.Set(cacheKey, cacheValue, (int)expiration.Value.TotalSeconds);
60+
flag = _cache.Set(cacheKey, cacheValue, (int)expiration.Value.TotalSeconds, exists: exists);
4961
}
5062
else
5163
{
52-
flag = _cache.Set(cacheKey, cacheValue);
64+
flag = _cache.Set(cacheKey, cacheValue, exists: exists);
5365
}
5466

5567
return flag;
5668
}
5769

58-
public async Task<bool> StringSetAsync(string cacheKey, string cacheValue, System.TimeSpan? expiration)
70+
public async Task<bool> StringSetAsync(string cacheKey, string cacheValue, System.TimeSpan? expiration, string when)
5971
{
6072
ArgumentCheck.NotNullOrWhiteSpace(cacheKey, nameof(cacheKey));
6173

6274
bool flag = false;
6375

76+
RedisExistence? exists = null;
77+
78+
if (when.Equals("nx", System.StringComparison.OrdinalIgnoreCase))
79+
{
80+
exists = RedisExistence.Nx;
81+
}
82+
else if (when.Equals("xx", System.StringComparison.OrdinalIgnoreCase))
83+
{
84+
exists = RedisExistence.Xx;
85+
}
86+
6487
if (expiration.HasValue)
6588
{
66-
flag = await _cache.SetAsync(cacheKey, cacheValue, (int)expiration.Value.TotalSeconds);
89+
flag = await _cache.SetAsync(cacheKey, cacheValue, (int)expiration.Value.TotalSeconds, exists: exists);
6790
}
6891
else
6992
{
70-
flag = await _cache.SetAsync(cacheKey, cacheValue);
93+
flag = await _cache.SetAsync(cacheKey, cacheValue, exists: exists);
7194
}
7295

73-
return flag;
96+
return flag;
7497
}
7598

7699
public string StringGet(string cacheKey)
77100
{
78101
ArgumentCheck.NotNullOrWhiteSpace(cacheKey, nameof(cacheKey));
79-
80-
var val = _cache.Get(cacheKey);
102+
103+
var val = _cache.Get(cacheKey);
81104
return val;
82105
}
83106

src/EasyCaching.Core/IRedisCachingProvider.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,18 @@ public interface IRedisCachingProvider
102102
/// <param name="cacheKey"></param>
103103
/// <param name="cacheValue"></param>
104104
/// <param name="expiration"></param>
105+
/// <param name="when">nx,xx,</param>
105106
/// <returns></returns>
106-
bool StringSet(string cacheKey, string cacheValue, System.TimeSpan? expiration = null);
107+
bool StringSet(string cacheKey, string cacheValue, System.TimeSpan? expiration = null, string when = "");
107108
/// <summary>
108109
/// https://redis.io/commands/set
109110
/// </summary>
110111
/// <param name="cacheKey"></param>
111112
/// <param name="cacheValue"></param>
112113
/// <param name="expiration"></param>
114+
/// <param name="when">nx,xx,</param>
113115
/// <returns></returns>
114-
Task<bool> StringSetAsync(string cacheKey, string cacheValue, System.TimeSpan? expiration = null);
116+
Task<bool> StringSetAsync(string cacheKey, string cacheValue, System.TimeSpan? expiration = null, string when = "");
115117
/// <summary>
116118
/// https://redis.io/commands/get
117119
/// </summary>

src/EasyCaching.Redis/DefaultRedisCachingProvider.String.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,41 @@ public async Task<double> IncrByFloatAsync(string cacheKey, double value = 1)
4545
return res;
4646
}
4747

48-
public bool StringSet(string cacheKey, string cacheValue, System.TimeSpan? expiration)
48+
public bool StringSet(string cacheKey, string cacheValue, System.TimeSpan? expiration, string when)
4949
{
5050
ArgumentCheck.NotNullOrWhiteSpace(cacheKey, nameof(cacheKey));
5151

52-
bool flag = _cache.StringSet(cacheKey, cacheValue, expiration);
52+
When w = When.Always;
53+
54+
if (when.Equals("nx", StringComparison.OrdinalIgnoreCase))
55+
{
56+
w = When.NotExists;
57+
}
58+
else if (when.Equals("xx", StringComparison.OrdinalIgnoreCase))
59+
{
60+
w = When.Exists;
61+
}
62+
63+
bool flag = _cache.StringSet(cacheKey, cacheValue, expiration, w);
5364
return flag;
5465
}
5566

56-
public async Task<bool> StringSetAsync(string cacheKey, string cacheValue, System.TimeSpan? expiration)
67+
public async Task<bool> StringSetAsync(string cacheKey, string cacheValue, System.TimeSpan? expiration, string when)
5768
{
5869
ArgumentCheck.NotNullOrWhiteSpace(cacheKey, nameof(cacheKey));
5970

60-
bool flag = await _cache.StringSetAsync(cacheKey, cacheValue, expiration);
71+
When w = When.Always;
72+
73+
if (when.Equals("nx", StringComparison.OrdinalIgnoreCase))
74+
{
75+
w = When.NotExists;
76+
}
77+
else if (when.Equals("xx", StringComparison.OrdinalIgnoreCase))
78+
{
79+
w = When.Exists;
80+
}
81+
82+
bool flag = await _cache.StringSetAsync(cacheKey, cacheValue, expiration, w);
6183
return flag;
6284
}
6385

test/EasyCaching.UnitTests/CachingTests/BaseRedisFeatureCachingProviderTest.cs

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,74 @@ protected virtual async Task StringSet_And_KeyExpire_And_TTL_Async_Should_Succee
8080
Assert.InRange(ttl, 1, 10);
8181

8282
await _provider.KeyDelAsync(cacheKey);
83-
}
83+
}
8484
#endregion
85-
85+
8686
#region String
87+
88+
[Fact]
89+
protected virtual void StringSet_With_Nx_Should_Succeed()
90+
{
91+
var cacheKey = $"{_nameSpace}-{Guid.NewGuid().ToString()}";
92+
var cacheValue = Guid.NewGuid().ToString();
93+
94+
var res = _provider.StringSet(cacheKey, cacheValue, when: "nx");
95+
Assert.True(res);
96+
97+
var res2 = _provider.StringSet(cacheKey, cacheValue, when: "nx");
98+
Assert.False(res2);
99+
100+
_provider.KeyDel(cacheKey);
101+
}
102+
103+
[Fact]
104+
protected virtual async Task StringSetAsync_With_Nx_Should_Succeed()
105+
{
106+
var cacheKey = $"{_nameSpace}-{Guid.NewGuid().ToString()}";
107+
var cacheValue = Guid.NewGuid().ToString();
108+
109+
var res = await _provider.StringSetAsync(cacheKey, cacheValue, when: "nx");
110+
Assert.True(res);
111+
112+
var res2 = await _provider.StringSetAsync(cacheKey, cacheValue, when: "nx");
113+
Assert.False(res2);
114+
115+
_provider.KeyDel(cacheKey);
116+
}
117+
118+
[Fact]
119+
protected virtual void StringSet_With_Xx_Should_Succeed()
120+
{
121+
var cacheKey = $"{_nameSpace}-{Guid.NewGuid().ToString()}";
122+
var cacheValue = Guid.NewGuid().ToString();
123+
124+
var res = _provider.StringSet(cacheKey, cacheValue, when: "xx");
125+
Assert.False(res);
126+
127+
var res2 = _provider.StringSet(cacheKey, cacheValue);
128+
Assert.True(res2);
129+
var res3 = _provider.StringSet(cacheKey, cacheValue, when: "xx");
130+
Assert.True(res3);
131+
132+
_provider.KeyDel(cacheKey);
133+
}
134+
135+
[Fact]
136+
protected virtual async Task StringSetAsync_With_Xx_Should_Succeed()
137+
{
138+
var cacheKey = $"{_nameSpace}-{Guid.NewGuid().ToString()}";
139+
var cacheValue = Guid.NewGuid().ToString();
140+
141+
var res = await _provider.StringSetAsync(cacheKey, cacheValue, when: "xx");
142+
Assert.False(res);
143+
144+
var res2 = await _provider.StringSetAsync(cacheKey, cacheValue);
145+
Assert.True(res2);
146+
var res3 = await _provider.StringSetAsync(cacheKey, cacheValue, when: "xx");
147+
Assert.True(res3);
148+
149+
_provider.KeyDel(cacheKey);
150+
}
87151

88152
[Fact]
89153
protected virtual void StringSet_And_StringGet_Should_Succeed()

0 commit comments

Comments
 (0)