80 lines
2.3 KiB
C#
80 lines
2.3 KiB
C#
namespace MiaoYu.Core.CodeGenerator.Services;
|
|
|
|
/// <summary>
|
|
/// 表结构缓存服务实现
|
|
/// </summary>
|
|
[Component]
|
|
public class TableSchemaCache : ITableSchemaCache, IScopedDependency
|
|
{
|
|
private readonly IMemoryCache _memoryCache;
|
|
private readonly DataSourceManager _dataSourceManager;
|
|
private readonly ILogger<TableSchemaCache> _logger;
|
|
|
|
private const string CACHE_KEY = "CodeGenerator:AllTables";
|
|
private static readonly TimeSpan CACHE_DURATION = TimeSpan.FromMinutes(20);
|
|
|
|
public TableSchemaCache(
|
|
IMemoryCache memoryCache,
|
|
DataSourceManager dataSourceManager,
|
|
ILogger<TableSchemaCache> logger)
|
|
{
|
|
_memoryCache = memoryCache;
|
|
_dataSourceManager = dataSourceManager;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取所有表信息(从缓存或数据库)
|
|
/// </summary>
|
|
public List<DbTableInfo> GetAllTables()
|
|
{
|
|
return _memoryCache.GetOrCreate(CACHE_KEY, entry =>
|
|
{
|
|
entry.SlidingExpiration = CACHE_DURATION;
|
|
|
|
_logger.LogInformation("缓存未命中,从数据库查询表结构信息");
|
|
|
|
var tables = _dataSourceManager.GetAllTables();
|
|
|
|
_logger.LogInformation("成功加载 {Count} 个表到缓存", tables.Count);
|
|
|
|
return tables;
|
|
}) ?? new List<DbTableInfo>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刷新缓存
|
|
/// </summary>
|
|
public void RefreshCache()
|
|
{
|
|
_logger.LogInformation("手动刷新表结构缓存");
|
|
|
|
_memoryCache.Remove(CACHE_KEY);
|
|
|
|
// 重新加载
|
|
GetAllTables();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清除缓存
|
|
/// </summary>
|
|
public void ClearCache()
|
|
{
|
|
_logger.LogInformation("清除表结构缓存");
|
|
_memoryCache.Remove(CACHE_KEY);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据数据库和表名获取表信息
|
|
/// </summary>
|
|
public DbTableInfo? GetTable(string databaseKey, string tableName)
|
|
{
|
|
var allTables = GetAllTables();
|
|
|
|
return allTables.FirstOrDefault(t =>
|
|
t.DataBase?.Equals(databaseKey, StringComparison.OrdinalIgnoreCase) == true &&
|
|
t.Name?.Equals(tableName, StringComparison.OrdinalIgnoreCase) == true);
|
|
}
|
|
}
|
|
|