From fa4a082a4b5febcf18d86ce5edb740980261352a Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 17 Aug 2022 12:03:38 +0800 Subject: [PATCH 1/3] Compatible with old versions of redis server --- .../StackExchangeRedis/AbpRedisCache.cs | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) 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 d52a40e5b5..bfe8a5da15 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 @@ -15,18 +15,19 @@ namespace Volo.Abp.Caching.StackExchangeRedis; [DisableConventionalRegistration] public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems { - protected static readonly string SetScript; + protected static string SetScript; protected static readonly string AbsoluteExpirationKey; protected static readonly string SlidingExpirationKey; protected static readonly string DataKey; protected static readonly long NotPresent; - private static readonly FieldInfo RedisDatabaseField; - private static readonly MethodInfo ConnectMethod; - private static readonly MethodInfo ConnectAsyncMethod; - private static readonly MethodInfo MapMetadataMethod; - private static readonly MethodInfo GetAbsoluteExpirationMethod; - private static readonly MethodInfo GetExpirationInSecondsMethod; + private readonly static FieldInfo SetScriptField; + private readonly static FieldInfo RedisDatabaseField; + private readonly static MethodInfo ConnectMethod; + private readonly static MethodInfo ConnectAsyncMethod; + private readonly static MethodInfo MapMetadataMethod; + private readonly static MethodInfo GetAbsoluteExpirationMethod; + private readonly static MethodInfo GetExpirationInSecondsMethod; protected IDatabase RedisDatabase => GetRedisDatabase(); private IDatabase _redisDatabase; @@ -36,9 +37,11 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems static AbpRedisCache() { var type = typeof(RedisCache); - + RedisDatabaseField = type.GetField("_cache", BindingFlags.Instance | BindingFlags.NonPublic); + SetScriptField = type.GetField("_setScript", BindingFlags.Instance | BindingFlags.NonPublic); + ConnectMethod = type.GetMethod("Connect", BindingFlags.Instance | BindingFlags.NonPublic); ConnectAsyncMethod = type.GetMethod("ConnectAsync", BindingFlags.Instance | BindingFlags.NonPublic); @@ -51,9 +54,6 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems GetExpirationInSecondsMethod = type.GetMethod("GetExpirationInSeconds", BindingFlags.Static | BindingFlags.NonPublic); - SetScript = type.GetField("SetScript", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null) - .ToString(); - AbsoluteExpirationKey = type.GetField("AbsoluteExpirationKey", BindingFlags.Static | BindingFlags.NonPublic) ?.GetValue(null).ToString(); @@ -71,6 +71,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems : base(optionsAccessor) { Instance = optionsAccessor.Value.InstanceName ?? string.Empty; + Connect(); } protected virtual void Connect() @@ -81,16 +82,18 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems } ConnectMethod.Invoke(this, Array.Empty()); + SetSetScript(); } - protected virtual Task ConnectAsync(CancellationToken token = default) + protected virtual async Task ConnectAsync(CancellationToken token = default) { if (GetRedisDatabase() != null) { - return Task.CompletedTask; + return; } - return (Task)ConnectAsyncMethod.Invoke(this, new object[] { token }); + await (Task)ConnectAsyncMethod.Invoke(this, new object[] { token }); + SetSetScript(); } public byte[][] GetMany( @@ -333,4 +336,9 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems return _redisDatabase; } + + private void SetSetScript() + { + SetScript = SetScriptField?.GetValue(this).ToString(); + } } From 76fcc8adba4830f15efaacf033d73f765e4bc8c0 Mon Sep 17 00:00:00 2001 From: Roc Date: Wed, 17 Aug 2022 13:45:05 +0800 Subject: [PATCH 2/3] Update AbpOpenIddictScopeCache.cs --- .../Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeCache.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeCache.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeCache.cs index af5999fcc5..267fb175e2 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeCache.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeCache.cs @@ -9,11 +9,11 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.OpenIddict.Scopes; -public class AbpOpenIddictScopeCacheAbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase>, +public class AbpOpenIddictScopeCache : AbpOpenIddictCacheBase>, IOpenIddictScopeCache, ITransientDependency { - public AbpOpenIddictScopeCacheAbpOpenIddictAuthorizationCache( + public AbpOpenIddictScopeCache( IDistributedCache cache, IDistributedCache arrayCache, IOpenIddictScopeStore store) From 56b9d9b10f32ab62f7999b3a822bd80a84ebcbc2 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 17 Aug 2022 13:50:21 +0800 Subject: [PATCH 3/3] Update AbpRedisCache --- .../Abp/Caching/StackExchangeRedis/AbpRedisCache.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) 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 bfe8a5da15..68a59aab2d 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 @@ -15,7 +15,6 @@ namespace Volo.Abp.Caching.StackExchangeRedis; [DisableConventionalRegistration] public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems { - protected static string SetScript; protected static readonly string AbsoluteExpirationKey; protected static readonly string SlidingExpirationKey; protected static readonly string DataKey; @@ -71,7 +70,6 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems : base(optionsAccessor) { Instance = optionsAccessor.Value.InstanceName ?? string.Empty; - Connect(); } protected virtual void Connect() @@ -82,7 +80,6 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems } ConnectMethod.Invoke(this, Array.Empty()); - SetSetScript(); } protected virtual async Task ConnectAsync(CancellationToken token = default) @@ -93,7 +90,6 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems } await (Task)ConnectAsyncMethod.Invoke(this, new object[] { token }); - SetSetScript(); } public byte[][] GetMany( @@ -286,7 +282,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems for (var i = 0; i < itemArray.Length; i++) { - tasks[i] = RedisDatabase.ScriptEvaluateAsync(SetScript, new RedisKey[] { Instance + itemArray[i].Key }, + tasks[i] = RedisDatabase.ScriptEvaluateAsync(GetSetScript(), new RedisKey[] { Instance + itemArray[i].Key }, new RedisValue[] { absoluteExpiration?.Ticks ?? NotPresent, @@ -337,8 +333,8 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems return _redisDatabase; } - private void SetSetScript() + private string GetSetScript() { - SetScript = SetScriptField?.GetValue(this).ToString(); + return SetScriptField?.GetValue(this).ToString(); } }