diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs index 900f252a77..7ad3dbd7bf 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs @@ -93,21 +93,21 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems RecycleMethodInfo.Invoke(this, new object[] { lease! }); } - public byte[]?[] GetMany(IEnumerable keys) + public virtual byte[]?[] GetMany(IEnumerable keys) { keys = Check.NotNull(keys, nameof(keys)); return GetAndRefreshMany(keys, true); } - public async Task GetManyAsync(IEnumerable keys, CancellationToken token = default) + public virtual async Task GetManyAsync(IEnumerable keys, CancellationToken token = default) { keys = Check.NotNull(keys, nameof(keys)); return await GetAndRefreshManyAsync(keys, true, token); } - public void SetMany(IEnumerable> items, DistributedCacheEntryOptions options) + public virtual void SetMany(IEnumerable> items, DistributedCacheEntryOptions options) { var cache = Connect(); @@ -126,7 +126,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems } } - public async Task SetManyAsync( IEnumerable> items, DistributedCacheEntryOptions options, CancellationToken token = default) + public virtual async Task SetManyAsync(IEnumerable> items, DistributedCacheEntryOptions options, CancellationToken token = default) { token.ThrowIfCancellationRequested(); @@ -147,21 +147,21 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems } } - public void RefreshMany(IEnumerable keys) + public virtual void RefreshMany(IEnumerable keys) { keys = Check.NotNull(keys, nameof(keys)); GetAndRefreshMany(keys, false); } - public async Task RefreshManyAsync(IEnumerable keys, CancellationToken token = default) + public virtual async Task RefreshManyAsync(IEnumerable keys, CancellationToken token = default) { keys = Check.NotNull(keys, nameof(keys)); await GetAndRefreshManyAsync(keys, false, token); } - public void RemoveMany(IEnumerable keys) + public virtual void RemoveMany(IEnumerable keys) { keys = Check.NotNull(keys, nameof(keys)); @@ -169,7 +169,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems try { - cache.KeyDelete(keys.Select(key => InstancePrefix.Append(key)).ToArray()); + Task.WaitAll(PipelineRemoveManyAsync(cache, keys)); } catch (Exception ex) { @@ -178,7 +178,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems } } - public async Task RemoveManyAsync(IEnumerable keys, CancellationToken token = default) + public virtual async Task RemoveManyAsync(IEnumerable keys, CancellationToken token = default) { keys = Check.NotNull(keys, nameof(keys)); @@ -187,7 +187,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems try { - await cache.KeyDeleteAsync(keys.Select(key => InstancePrefix.Append(key)).ToArray()); + await Task.WhenAll(PipelineRemoveManyAsync(cache, keys)); } catch (Exception ex) { @@ -195,6 +195,11 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems throw; } } + + protected virtual Task[] PipelineRemoveManyAsync(IDatabase cache, IEnumerable keys) + { + return keys.Select(key => cache.KeyDeleteAsync(InstancePrefix.Append(key))).ToArray(); + } protected virtual byte[]?[] GetAndRefreshMany(IEnumerable keys, bool getData) {