Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit f640173

Browse files
committed
Use more precise redis-server operations where supported
1 parent 1373bae commit f640173

File tree

5 files changed

+57
-21
lines changed

5 files changed

+57
-21
lines changed

src/ServiceStack.Redis/Generic/RedisTypedClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public string GetRandomKey()
283283

284284
public bool ExpireEntryIn(string key, TimeSpan expireIn)
285285
{
286-
return client.Expire(key, (int)expireIn.TotalSeconds);
286+
return client.ExpireEntryIn(key, expireIn);
287287
}
288288

289289
public bool ExpireEntryAt(string key, DateTime expireAt)
@@ -294,7 +294,7 @@ public bool ExpireEntryAt(string key, DateTime expireAt)
294294
public bool ExpireIn(object id, TimeSpan expireIn)
295295
{
296296
var key = client.UrnKey<T>(id);
297-
return client.Expire(key, (int)expireIn.TotalSeconds);
297+
return client.ExpireEntryIn(key, expireIn);
298298
}
299299

300300
public bool ExpireAt(object id, DateTime expireAt)

src/ServiceStack.Redis/RedisClient.ICacheClient.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,14 @@ public bool Set<T>(string key, T value, TimeSpan expiresIn)
101101
var bytesValue = value as byte[];
102102
if (bytesValue != null)
103103
{
104-
base.SetEx(key, (int)expiresIn.TotalSeconds, bytesValue);
104+
if (ServerVersionNumber >= 2600)
105+
{
106+
base.PSetEx(key, (long)expiresIn.TotalMilliseconds, bytesValue);
107+
}
108+
else
109+
{
110+
base.SetEx(key, (int)expiresIn.TotalSeconds, bytesValue);
111+
}
105112
return true;
106113
}
107114

src/ServiceStack.Redis/RedisClient.cs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,17 @@ public void SetEntry(string key, string value, TimeSpan expireIn)
136136
? value.ToUtf8Bytes()
137137
: null;
138138

139-
SetEx(key, (int)expireIn.TotalSeconds, bytesValue);
140-
141-
//New in 2.6.x - TODO change when 2.6 is most popular
142-
//if (expireIn.Milliseconds > 0)
143-
// base.Set(key, bytesValue, 0, (long)expireIn.TotalMilliseconds);
144-
//else
145-
// base.Set(key, bytesValue, (int)expireIn.TotalSeconds, 0);
139+
if (ServerVersionNumber >= 2600)
140+
{
141+
if (expireIn.Milliseconds > 0)
142+
base.Set(key, bytesValue, 0, (long)expireIn.TotalMilliseconds);
143+
else
144+
base.Set(key, bytesValue, (int)expireIn.TotalSeconds, 0);
145+
}
146+
else
147+
{
148+
SetEx(key, (int)expireIn.TotalSeconds, bytesValue);
149+
}
146150
}
147151

148152
public void SetEntryIfExists(string key, string value, TimeSpan expireIn)
@@ -309,12 +313,27 @@ public string GetRandomKey()
309313

310314
public bool ExpireEntryIn(string key, TimeSpan expireIn)
311315
{
316+
if (ServerVersionNumber >= 2600)
317+
{
318+
if (expireIn.Milliseconds > 0)
319+
{
320+
return PExpire(key, (long)expireIn.TotalMilliseconds);
321+
}
322+
}
323+
312324
return Expire(key, (int)expireIn.TotalSeconds);
313325
}
314326

315327
public bool ExpireEntryAt(string key, DateTime expireAt)
316328
{
317-
return ExpireAt(key, ConvertToServerDate(expireAt).ToUnixTime());
329+
if (ServerVersionNumber >= 2600)
330+
{
331+
return PExpireAt(key, ConvertToServerDate(expireAt).ToUnixTimeMs());
332+
}
333+
else
334+
{
335+
return ExpireAt(key, ConvertToServerDate(expireAt).ToUnixTime());
336+
}
318337
}
319338

320339
public TimeSpan GetTimeToLive(string key)

src/ServiceStack.Redis/RedisNativeClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public DateTime LastSave
162162
get
163163
{
164164
var t = SendExpectLong(Commands.LastSave);
165-
return DateTimeExtensions.FromUnixTime(t);
165+
return t.FromUnixTime();
166166
}
167167
}
168168

tests/ServiceStack.Redis.Tests/RedisClientTests.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,25 @@ public void Can_RenameKey()
161161
Assert.That(Redis.ContainsKey("newkey"), Is.True);
162162
}
163163

164-
[Test]
165-
public void Can_Expire()
166-
{
167-
Redis.SetEntry("key", "val");
168-
Redis.Expire("key", 1);
169-
Assert.That(Redis.ContainsKey("key"), Is.True);
170-
Thread.Sleep(2000);
171-
Assert.That(Redis.ContainsKey("key"), Is.False);
172-
}
164+
[Test]
165+
public void Can_Expire()
166+
{
167+
Redis.SetEntry("key", "val");
168+
Redis.Expire("key", 1);
169+
Assert.That(Redis.ContainsKey("key"), Is.True);
170+
Thread.Sleep(2000);
171+
Assert.That(Redis.ContainsKey("key"), Is.False);
172+
}
173+
174+
[Test]
175+
public void Can_Expire_Ms()
176+
{
177+
Redis.SetEntry("key", "val");
178+
Redis.ExpireEntryIn("key", TimeSpan.FromMilliseconds(100));
179+
Assert.That(Redis.ContainsKey("key"), Is.True);
180+
Thread.Sleep(500);
181+
Assert.That(Redis.ContainsKey("key"), Is.False);
182+
}
173183

174184
[Test]
175185
public void Can_ExpireAt()

0 commit comments

Comments
 (0)