From c1ce9e59728b8f0592fa7bd100466fd2c393ad1b Mon Sep 17 00:00:00 2001
From: LemonNoCry <773596523@qq.com>
Date: Mon, 12 Jun 2023 11:34:39 +0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E7=A7=BB=E9=99=A4=E5=8E=9F?=
=?UTF-8?q?=E6=9C=89=E7=9A=84RedisCacheAop=20=E4=B8=8ECacheAop=E6=9C=89?=
=?UTF-8?q?=E4=BA=9B=E9=87=8D=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Blog.Core.Api/Controllers/ValuesController.cs | 2 +-
Blog.Core.Api/appsettings.json | 5 +-
Blog.Core.Extensions/AOP/BlogCacheAOP.cs | 4 +-
Blog.Core.Extensions/AOP/BlogRedisCacheAOP.cs | 89 -------------------
.../Redis/IRedisBasketRepository.cs | 3 +-
.../ServiceExtensions/AppConfigSetup.cs | 22 ++---
.../AutofacModuleRegister.cs | 8 +-
Blog.Core.Services/AdvertisementServices.cs | 2 +-
Blog.Core.Tests/appsettings.json | 5 +-
9 files changed, 14 insertions(+), 126 deletions(-)
delete mode 100644 Blog.Core.Extensions/AOP/BlogRedisCacheAOP.cs
diff --git a/Blog.Core.Api/Controllers/ValuesController.cs b/Blog.Core.Api/Controllers/ValuesController.cs
index 03b3755..ae5cc81 100644
--- a/Blog.Core.Api/Controllers/ValuesController.cs
+++ b/Blog.Core.Api/Controllers/ValuesController.cs
@@ -164,7 +164,7 @@ namespace Blog.Core.Controllers
// 测试模拟异常,全局异常过滤器拦截
var i = 0;
- var d = 3 / i;
+ // var d = 3 / i;
// 测试 AOP 缓存
diff --git a/Blog.Core.Api/appsettings.json b/Blog.Core.Api/appsettings.json
index 73637e1..def53cf 100644
--- a/Blog.Core.Api/appsettings.json
+++ b/Blog.Core.Api/appsettings.json
@@ -41,10 +41,7 @@
"SubscriptionClientName": "Blog.Core"
},
"AppSettings": {
- "RedisCachingAOP": {
- "Enabled": false
- },
- "MemoryCachingAOP": {
+ "CachingAOP": {
"Enabled": true
},
"LogToDb": true,
diff --git a/Blog.Core.Extensions/AOP/BlogCacheAOP.cs b/Blog.Core.Extensions/AOP/BlogCacheAOP.cs
index d3d91f2..1d52a2d 100644
--- a/Blog.Core.Extensions/AOP/BlogCacheAOP.cs
+++ b/Blog.Core.Extensions/AOP/BlogCacheAOP.cs
@@ -61,8 +61,8 @@ namespace Blog.Core.AOP
var type = invocation.Method.ReturnType;
if (typeof(Task).IsAssignableFrom(type))
{
- var resultProperty = type.GetProperty("Result");
- response = resultProperty?.GetValue(invocation.ReturnValue);
+ dynamic result = invocation.ReturnValue;
+ response = result.Result;
}
else
{
diff --git a/Blog.Core.Extensions/AOP/BlogRedisCacheAOP.cs b/Blog.Core.Extensions/AOP/BlogRedisCacheAOP.cs
deleted file mode 100644
index 9bc7f7f..0000000
--- a/Blog.Core.Extensions/AOP/BlogRedisCacheAOP.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using Blog.Core.Common;
-using Blog.Core.Extensions;
-using Castle.DynamicProxy;
-using System;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Blog.Core.AOP
-{
- ///
- /// 面向切面的缓存使用
- ///
- public class BlogRedisCacheAOP : CacheAOPbase
- {
- //通过注入的方式,把缓存操作接口通过构造函数注入
- private readonly IRedisBasketRepository _cache;
- public BlogRedisCacheAOP(IRedisBasketRepository cache)
- {
- _cache = cache;
- }
-
- //Intercept方法是拦截的关键所在,也是IInterceptor接口中的唯一定义
- //代码已经合并 ,学习pr流程
- public override void Intercept(IInvocation invocation)
- {
- var method = invocation.MethodInvocationTarget ?? invocation.Method;
- if (method.ReturnType == typeof(void) || method.ReturnType == typeof(Task))
- {
- invocation.Proceed();
- return;
- }
- //对当前方法的特性验证
- var qCachingAttribute = method.GetCustomAttributes(true).FirstOrDefault(x => x.GetType() == typeof(CachingAttribute)) as CachingAttribute;
-
- if (qCachingAttribute != null)
- {
- //获取自定义缓存键
- var cacheKey = CustomCacheKey(invocation);
- //注意是 string 类型,方法GetValue
- var cacheValue = _cache.GetValue(cacheKey).Result;
- if (cacheValue != null)
- {
- //将当前获取到的缓存值,赋值给当前执行方法
- Type returnType;
- if (typeof(Task).IsAssignableFrom(method.ReturnType))
- {
- returnType = method.ReturnType.GenericTypeArguments.FirstOrDefault();
- }
- else
- {
- returnType = method.ReturnType;
- }
-
- dynamic _result = Newtonsoft.Json.JsonConvert.DeserializeObject(cacheValue, returnType);
- invocation.ReturnValue = (typeof(Task).IsAssignableFrom(method.ReturnType)) ? Task.FromResult(_result) : _result;
- return;
- }
- //去执行当前的方法
- invocation.Proceed();
-
- //存入缓存
- if (!string.IsNullOrWhiteSpace(cacheKey))
- {
- object response;
-
- //Type type = invocation.ReturnValue?.GetType();
- var type = invocation.Method.ReturnType;
- if (typeof(Task).IsAssignableFrom(type))
- {
- var resultProperty = type.GetProperty("Result");
- response = resultProperty.GetValue(invocation.ReturnValue);
- }
- else
- {
- response = invocation.ReturnValue;
- }
- if (response == null) response = string.Empty;
-
- _cache.Set(cacheKey, response, TimeSpan.FromMinutes(qCachingAttribute.AbsoluteExpiration)).Wait();
- }
- }
- else
- {
- invocation.Proceed();//直接执行被拦截方法
- }
- }
- }
-
-}
diff --git a/Blog.Core.Extensions/Redis/IRedisBasketRepository.cs b/Blog.Core.Extensions/Redis/IRedisBasketRepository.cs
index 08effd1..8540816 100644
--- a/Blog.Core.Extensions/Redis/IRedisBasketRepository.cs
+++ b/Blog.Core.Extensions/Redis/IRedisBasketRepository.cs
@@ -1,6 +1,7 @@
using StackExchange.Redis;
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Threading.Tasks;
namespace Blog.Core.Extensions
@@ -8,7 +9,7 @@ namespace Blog.Core.Extensions
///
/// Redis缓存接口
///
- [Obsolete("普通缓存考虑直接使用ICaching,如果要使用Redis队列等还是使用此类")]
+ [Description("普通缓存考虑直接使用ICaching,如果要使用Redis队列等还是使用此类")]
public interface IRedisBasketRepository
{
diff --git a/Blog.Core.Extensions/ServiceExtensions/AppConfigSetup.cs b/Blog.Core.Extensions/ServiceExtensions/AppConfigSetup.cs
index 0336567..d7a1f90 100644
--- a/Blog.Core.Extensions/ServiceExtensions/AppConfigSetup.cs
+++ b/Blog.Core.Extensions/ServiceExtensions/AppConfigSetup.cs
@@ -40,25 +40,14 @@ namespace Blog.Core.Extensions
{
Console.WriteLine($"Current authorization scheme: " + (Permissions.IsUseIds4 ? "Ids4" : "JWT"));
}
-
- // Redis缓存AOP
- if (!AppSettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Enabled" }).ObjToBool())
+ // 缓存AOP
+ if (!AppSettings.app(new string[] { "AppSettings", "CachingAOP", "Enabled" }).ObjToBool())
{
- Console.WriteLine($"Redis Caching AOP: False");
+ Console.WriteLine($"Caching AOP: False");
}
else
{
- ConsoleHelper.WriteSuccessLine($"Redis Caching AOP: True");
- }
-
- // 内存缓存AOP
- if (!AppSettings.app(new string[] { "AppSettings", "MemoryCachingAOP", "Enabled" }).ObjToBool())
- {
- Console.WriteLine($"Memory Caching AOP: False");
- }
- else
- {
- ConsoleHelper.WriteSuccessLine($"Memory Caching AOP: True");
+ ConsoleHelper.WriteSuccessLine($"Caching AOP: True");
}
// 服务日志AOP
@@ -259,8 +248,7 @@ namespace Blog.Core.Extensions
List aopInfos = new()
{
- new string[] { "Redis缓存AOP", AppSettings.app("AppSettings", "RedisCachingAOP", "Enabled") },
- new string[] { "内存缓存AOP", AppSettings.app("AppSettings", "MemoryCachingAOP", "Enabled") },
+ new string[] { "缓存AOP", AppSettings.app("AppSettings", "CachingAOP", "Enabled") },
new string[] { "服务日志AOP", AppSettings.app("AppSettings", "LogAOP", "Enabled") },
new string[] { "事务AOP", AppSettings.app("AppSettings", "TranAOP", "Enabled") },
new string[] { "Sql执行AOP", AppSettings.app("AppSettings", "SqlAOP", "Enabled") },
diff --git a/Blog.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs b/Blog.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs
index 4351962..4836c40 100644
--- a/Blog.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs
+++ b/Blog.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs
@@ -39,13 +39,7 @@ namespace Blog.Core.Extensions
// AOP 开关,如果想要打开指定的功能,只需要在 appsettigns.json 对应对应 true 就行。
var cacheType = new List();
- if (AppSettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Enabled" }).ObjToBool())
- {
- builder.RegisterType();
- cacheType.Add(typeof(BlogRedisCacheAOP));
- }
-
- if (AppSettings.app(new string[] { "AppSettings", "MemoryCachingAOP", "Enabled" }).ObjToBool())
+ if (AppSettings.app(new string[] { "AppSettings", "CachingAOP", "Enabled" }).ObjToBool())
{
builder.RegisterType();
cacheType.Add(typeof(BlogCacheAOP));
diff --git a/Blog.Core.Services/AdvertisementServices.cs b/Blog.Core.Services/AdvertisementServices.cs
index c95f414..348048e 100644
--- a/Blog.Core.Services/AdvertisementServices.cs
+++ b/Blog.Core.Services/AdvertisementServices.cs
@@ -13,7 +13,7 @@ namespace Blog.Core.Services
int a = 1;
int b = 0;
- int c = a / b;
+ // int c = a / b;
}
//public IAdvertisementRepository dal = new AdvertisementRepository();
diff --git a/Blog.Core.Tests/appsettings.json b/Blog.Core.Tests/appsettings.json
index 23ab9c6..8c0305c 100644
--- a/Blog.Core.Tests/appsettings.json
+++ b/Blog.Core.Tests/appsettings.json
@@ -45,10 +45,7 @@
"SubscriptionClientName": "Blog.Core"
},
"AppSettings": {
- "RedisCachingAOP": {
- "Enabled": false
- },
- "MemoryCachingAOP": {
+ "CachingAOP": {
"Enabled": true
},
"LogAOP": {