实现ICacheService接口,该接口支持sqlsugar数据缓冲。

This commit is contained in:
falcon 2022-04-29 15:46:20 +08:00
parent 11df33a495
commit 9ab32a2d4d
2 changed files with 82 additions and 0 deletions

View File

@ -2,6 +2,7 @@
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Caching.StackExchangeRedis;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using System;
namespace Falcon.SugarApi.Cache
@ -22,6 +23,7 @@ namespace Falcon.SugarApi.Cache
services.AddStackExchangeRedisCache(configRedis);
services.AddSingleton<ISugarCache, SugarCache>();
services.AddSingleton<ISugarCacheAsync, SugarCache>();
services.AddSingleton<ICacheService, SugarCacheService>();
return services;
}
@ -36,6 +38,7 @@ namespace Falcon.SugarApi.Cache
services.AddDistributedMemoryCache(configAction);
services.AddSingleton<ISugarCache, SugarCache>();
services.AddSingleton<ISugarCacheAsync, SugarCache>();
services.AddSingleton<ICacheService, SugarCacheService>();
return services;
}
}

View File

@ -0,0 +1,79 @@
using Falcon.SugarApi.JsonSerialize;
using SqlSugar;
using System;
using System.Collections.Generic;
namespace Falcon.SugarApi.Cache
{
/// <summary>
/// SugarCache的ICacheService实现
/// </summary>
public class SugarCacheService : ICacheService
{
/// <summary>
/// 默认缓存时间
/// </summary>
public int DefaultcacheDurationInSeconds { get; set; } = 24 * 60 * 60;
/// <summary>
/// 默认缓冲时间
/// </summary>
protected TimeSpan DefaultTimeSpan => TimeSpan.FromSeconds(DefaultcacheDurationInSeconds);
/// <summary>
/// 构造ICacheService实现
/// </summary>
public SugarCacheService(ISugarCache cache, IJsonSerialize json) {
Cache = cache;
Json = json;
}
/// <summary>
/// 缓冲数据提供器
/// </summary>
public ISugarCache Cache { get; }
/// <summary>
/// json序列化
/// </summary>
public IJsonSerialize Json { get; }
/// <inheritdoc/>
public void Add<V>(string key, V value) => Add(key, value, DefaultcacheDurationInSeconds);
/// <inheritdoc/>
public void Add<V>(string key, V value, int cacheDurationInSeconds) {
if (value == null) {
return;
}
var str = Json.Serialize(value);
Cache.SetStringValue(key, str, TimeSpan.FromSeconds(cacheDurationInSeconds));
}
/// <inheritdoc/>
public bool ContainsKey<V>(string key) {
return Get<V>(key) != null;
}
/// <inheritdoc/>
public V Get<V>(string key) {
_ = key ?? throw new ArgumentNullException(nameof(key));
var str = this.Cache.GetStringValue(key);
return str.IsNullOrEmpty() ? default(V) : (V)Json.Deserialize(str, typeof(V));
}
/// <inheritdoc/>
public IEnumerable<string> GetAllKey<V>() {
throw new NotImplementedException();
}
/// <inheritdoc/>
public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue) {
var val = Get<V>(cacheKey) ?? create();
Add(cacheKey, val);
return val;
}
/// <inheritdoc/>
public void Remove<V>(string key) => this.Cache.SetStringValue(key, null, DefaultTimeSpan);
}
}