From e8b8b6000d3b694570b5797a9dc9dd6284baf7ed Mon Sep 17 00:00:00 2001
From: falcon <9504402@qq.com>
Date: Thu, 29 Sep 2022 17:29:47 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BC=93=E5=86=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Cache/HttpRuntimeCache.cs | 52 ++++++++++++
.../Cache/SqlSugarRedisCache.cs | 83 +++++++++++++++++++
.../SugarConnectionConfig.cs | 35 +++++++-
Falcon.SugarApi/Falcon.SugarApi.csproj | 2 +
4 files changed, 171 insertions(+), 1 deletion(-)
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/Cache/HttpRuntimeCache.cs
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/Cache/SqlSugarRedisCache.cs
diff --git a/Falcon.SugarApi/DatabaseDefinitions/Cache/HttpRuntimeCache.cs b/Falcon.SugarApi/DatabaseDefinitions/Cache/HttpRuntimeCache.cs
new file mode 100644
index 0000000..d1923db
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/Cache/HttpRuntimeCache.cs
@@ -0,0 +1,52 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Caching;
+
+namespace Falcon.SugarApi.DatabaseDefinitions.Cache
+{
+ ///
+ /// HttpRuntimeCache 缓存
+ ///
+ public class HttpRuntimeCache : ICacheService
+ {
+ public void Add(string key, V value) {
+ ObjectCache cache = MemoryCache.Default;
+ cache[key] = value;
+ }
+ public void Add(string key, V value, int cacheDurationInSeconds) {
+ MemoryCache.Default.Add(key, value, new CacheItemPolicy() {
+ AbsoluteExpiration = DateTime.Now.AddSeconds(cacheDurationInSeconds)
+ });
+ }
+ public bool ContainsKey(string key) {
+ return MemoryCache.Default.Contains(key);
+ }
+ public V Get(string key) {
+ return (V)MemoryCache.Default.Get(key);
+ }
+ public IEnumerable GetAllKey() {
+ var keys = new List();
+ foreach (var cacheItem in MemoryCache.Default) {
+ keys.Add(cacheItem.Key);
+ }
+ return keys;
+ }
+ public V GetOrCreate(string cacheKey, Func create, int cacheDurationInSeconds = int.MaxValue) {
+ var cacheManager = MemoryCache.Default;
+ if (cacheManager.Contains(cacheKey)) {
+ return (V)cacheManager[cacheKey];
+ }
+ else {
+ var result = create();
+ cacheManager.Add(cacheKey, result, new CacheItemPolicy() {
+ AbsoluteExpiration = DateTime.Now.AddSeconds(cacheDurationInSeconds)
+ });
+ return result;
+ }
+ }
+ public void Remove(string key) {
+ MemoryCache.Default.Remove(key);
+ }
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/Cache/SqlSugarRedisCache.cs b/Falcon.SugarApi/DatabaseDefinitions/Cache/SqlSugarRedisCache.cs
new file mode 100644
index 0000000..e065b9a
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/Cache/SqlSugarRedisCache.cs
@@ -0,0 +1,83 @@
+using SqlSugar;
+using SugarRedis;
+using System;
+using System.Collections.Generic;
+
+namespace Falcon.SugarApi.DatabaseDefinitions.Cache
+{
+
+ ///
+ /// SqlSugar使用Redis缓冲。必须以单例实现
+ ///
+ public class SqlSugarRedisCache : ICacheService
+ {
+
+ //NUGET安装 SugarRedis (也可以自个实现)
+ //注意:SugarRedis 不要扔到构造函数里面, 一定要单例模式
+
+
+ ///
+ /// 数据缓冲服务
+ ///
+ public static SugarRedisClient Service { get; private set; } = null;
+
+ ///
+ /// 通过配置实现Redis缓冲,必须单例实现.
+ /// 默认:127.0.0.1:6379,password=,connectTimeout=3000,connectRetry=1,syncTimeout=10000,DefaultDatabase=0
+ ///
+ public SqlSugarRedisCache() {
+ Service ??= new SugarRedisClient();
+ }
+
+ ///
+ /// 通过配置实现Redis缓冲,必须单例实现
+ ///
+ /// Redis链接字符串
+ public SqlSugarRedisCache(string redisConnectionString) {
+ Service ??= redisConnectionString.IsNullOrEmpty() ? new SugarRedisClient()
+ : new SugarRedisClient(redisConnectionString);
+ }
+
+ public void Add(string key, V value) {
+ Service.Set(key, value);
+ }
+
+ public void Add(string key, V value, int cacheDurationInSeconds) {
+ Service.Set(key, value, cacheDurationInSeconds);
+ }
+
+ public bool ContainsKey(string key) {
+ return Service.Exists(key);
+ }
+
+ public V Get(string key) {
+ return Service.Get(key);
+ }
+
+ public IEnumerable GetAllKey() {
+
+ return Service.SearchCacheRegex("SqlSugarDataCache.*");
+ }
+
+ public V GetOrCreate(string cacheKey, Func create, int cacheDurationInSeconds = int.MaxValue) {
+ if (ContainsKey(cacheKey)) {
+ var result = Get(cacheKey);
+ if (result == null) {
+ return create();
+ }
+ else {
+ return result;
+ }
+ }
+ else {
+ var result = create();
+ Add(cacheKey, result, cacheDurationInSeconds);
+ return result;
+ }
+ }
+
+ public void Remove(string key) {
+ Service.Remove(key);
+ }
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs b/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs
index d7a5f84..e8b0523 100644
--- a/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs
+++ b/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs
@@ -1,4 +1,5 @@
-using SqlSugar;
+using Falcon.SugarApi.DatabaseDefinitions.Cache;
+using SqlSugar;
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
@@ -15,6 +16,7 @@ namespace Falcon.SugarApi.DatabaseDefinitions
/// 是否使用log
///
public bool Log { get; set; }
+
///
/// 实例化SugarDb链接配置
///
@@ -47,5 +49,36 @@ namespace Falcon.SugarApi.DatabaseDefinitions
//}
};
}
+
+ private static ICacheService? CacheService = null;
+
+ ///
+ /// 通过配置实现Redis缓冲,必须单例实现.
+ /// 默认:127.0.0.1:6379,password=,connectTimeout=3000,connectRetry=1,syncTimeout=10000,DefaultDatabase=0
+ ///
+ public void AddRedisCache() {
+ this.ConfigureExternalServices ??= new ConfigureExternalServices { };
+ this.ConfigureExternalServices.DataInfoCacheService = new SqlSugarRedisCache();
+ }
+
+ ///
+ /// 通过配置实现Redis缓冲,必须单例实现.
+ ///
+ public void AddRedisCache(string connectionString) {
+ if (connectionString.IsNullOrEmpty()) {
+ AddRedisCache();
+ return;
+ }
+ this.ConfigureExternalServices ??= new ConfigureExternalServices { };
+ this.ConfigureExternalServices.DataInfoCacheService = new SqlSugarRedisCache(connectionString);
+ }
+
+ ///
+ /// HttpRuntimeCache 缓存
+ ///
+ public void AddHttpRuntimeCache() {
+ this.ConfigureExternalServices ??= new ConfigureExternalServices { };
+ this.ConfigureExternalServices.DataInfoCacheService = new HttpRuntimeCache();
+ }
}
}
diff --git a/Falcon.SugarApi/Falcon.SugarApi.csproj b/Falcon.SugarApi/Falcon.SugarApi.csproj
index 3445cb5..a88ddc1 100644
--- a/Falcon.SugarApi/Falcon.SugarApi.csproj
+++ b/Falcon.SugarApi/Falcon.SugarApi.csproj
@@ -13,7 +13,9 @@
+
+