Skip to content

Commit 79ca503

Browse files
committed
Just few optimizations
1 parent 53734ec commit 79ca503

File tree

2 files changed

+19
-31
lines changed

2 files changed

+19
-31
lines changed

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.Hash.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,6 @@ await Parallel.ForEachAsync(keys, async (key, _) =>
9292

9393
var dictionary = new Dictionary<string, T?>();
9494

95-
if (data is null)
96-
return dictionary;
97-
9895
var redisValues = ((RedisValue[]?)data);
9996

10097
ref var searchSpaceRedisValue = ref MemoryMarshal.GetReference(redisValues.AsSpan());
@@ -166,15 +163,21 @@ public Task<bool> HashSetAsync<T>(string hashKey, string key, T value, bool nx =
166163
/// <inheritdoc/>
167164
public Task HashSetAsync<T>(string hashKey, IDictionary<string, T> values, CommandFlags flag = CommandFlags.None)
168165
{
169-
var entries = values.Select(kv => new HashEntry(kv.Key, Serializer.Serialize(kv.Value)));
166+
var entries = new HashEntry[values.Count];
167+
var i = 0;
168+
169+
foreach (var (key, value) in values)
170+
entries[i++] = new HashEntry(key, Serializer.Serialize(value));
170171

171-
return Database.HashSetAsync(hashKey, entries.ToArray(), flag);
172+
return Database.HashSetAsync(hashKey, entries, flag);
172173
}
173174

174175
/// <inheritdoc/>
175176
public async Task<IEnumerable<T?>> HashValuesAsync<T>(string hashKey, CommandFlags flag = CommandFlags.None)
176177
{
177-
return (await Database.HashValuesAsync(hashKey, flag).ConfigureAwait(false)).Select(x => Serializer.Deserialize<T>(x!));
178+
return (await Database.HashValuesAsync(hashKey, flag)
179+
.ConfigureAwait(false))
180+
.ToFastArray(x => Serializer.Deserialize<T>(x!));
178181
}
179182

180183
/// <inheritdoc/>

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.cs

+10-25
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,7 @@ public Task<bool> RemoveAsync(string key, CommandFlags flag = CommandFlags.None)
8383
/// <inheritdoc/>
8484
public Task<long> RemoveAllAsync(string[] keys, CommandFlags flag = CommandFlags.None)
8585
{
86-
var redisKeys = new RedisKey[keys.Length];
87-
88-
ref var searchSpace = ref MemoryMarshal.GetReference(keys.AsSpan());
89-
90-
for (var i = 0; i < keys.Length; i++)
91-
{
92-
ref var key = ref Unsafe.Add(ref searchSpace, i);
93-
redisKeys[i] = (RedisKey)key;
94-
}
86+
var redisKeys = keys.ToFastArray(key => (RedisKey)key);
9587

9688
return Database.KeyDeleteAsync(redisKeys, flag);
9789
}
@@ -334,13 +326,12 @@ public Task<long> SetAddAllAsync<T>(string key, CommandFlags flag = CommandFlags
334326
if (items.Any(item => item == null))
335327
throw new ArgumentException("items cannot contains any null item.", nameof(items));
336328

329+
var values = items.ToFastArray(item => (RedisValue)Serializer.Serialize(item));
330+
337331
return Database
338332
.SetAddAsync(
339333
key,
340-
items
341-
.Select(item => Serializer.Serialize(item))
342-
.Select(x => (RedisValue)x)
343-
.ToArray(),
334+
values,
344335
flag);
345336
}
346337

@@ -370,17 +361,17 @@ public Task<long> SetRemoveAllAsync<T>(string key, CommandFlags flag = CommandFl
370361
if (items.Any(item => item == null))
371362
throw new ArgumentException("items cannot contains any null item.", nameof(items));
372363

373-
return Database.SetRemoveAsync(key, items
374-
.Select(item => Serializer.Serialize(item))
375-
.Select(x => (RedisValue)x)
376-
.ToArray(), flag);
364+
var values = items.ToFastArray(item => (RedisValue)Serializer.Serialize(item));
365+
366+
return Database.SetRemoveAsync(key, values, flag);
377367
}
378368

379369
/// <inheritdoc/>
380370
public async Task<string[]> SetMemberAsync(string memberName, CommandFlags flag = CommandFlags.None)
381371
{
382372
var members = await Database.SetMembersAsync(memberName, flag).ConfigureAwait(false);
383-
return members.Select(x => x.ToString()).ToArray();
373+
374+
return members.ToFastArray(x => x.ToString());
384375
}
385376

386377
/// <inheritdoc/>
@@ -489,13 +480,7 @@ private static Dictionary<string, string> ParseInfo(string info)
489480

490481
var result = new Dictionary<string, string>();
491482

492-
ref var searchSpace = ref MemoryMarshal.GetReference(data.AsSpan());
493-
494-
for (var i = 0; i < data.Length; i++)
495-
{
496-
ref var x = ref Unsafe.Add(ref searchSpace, i);
497-
result.TryAdd(x.Key, x.InfoValue);
498-
}
483+
data.FastIteration((x, _) => result.TryAdd(x.Key, x.InfoValue));
499484

500485
return result;
501486
}

0 commit comments

Comments
 (0)