数据库缓存支持分布式缓存
This commit is contained in:
parent
511bfab781
commit
14cb6627ff
|
@ -0,0 +1,81 @@
|
|||
using Falcon.SugarApi.JsonSerialize;
|
||||
using Microsoft.Extensions.Caching.Distributed;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Falcon.SugarApi.DatabaseDefinitions.Cache
|
||||
{
|
||||
/// <summary>
|
||||
/// 使用分布式缓存存储器
|
||||
/// </summary>
|
||||
public class DistributedCache : ICacheService
|
||||
{
|
||||
/// <summary>
|
||||
/// 分布式缓存存储器
|
||||
/// </summary>
|
||||
public IDistributedCache Cache { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 序列化方法
|
||||
/// </summary>
|
||||
public IJsonSerialize Serialize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提供分布式缓存存储器
|
||||
/// </summary>
|
||||
/// <param name="cache">分布式缓存存储器</param>
|
||||
/// <param name="serialize">实现序列化的接口s</param>
|
||||
public DistributedCache(IDistributedCache cache, IJsonSerialize serialize) {
|
||||
this.Cache = cache;
|
||||
this.Serialize = serialize;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Add<V>(string key, V value) {
|
||||
var valStr = this.Serialize.Serialize(value);
|
||||
this.Cache.SetString(key, valStr);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Add<V>(string key, V value, int cacheDurationInSeconds) {
|
||||
var valStr = this.Serialize.Serialize(value);
|
||||
DistributedCacheEntryOptions op = new() {
|
||||
AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(cacheDurationInSeconds),
|
||||
};
|
||||
this.Cache.SetString(key, valStr, op);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool ContainsKey<V>(string key) {
|
||||
return this.Cache.Get(key) != null;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public V Get<V>(string key) {
|
||||
var val = this.Cache.GetString(key);
|
||||
if (val == null) return default(V);
|
||||
return (V)this.Serialize.Deserialize(val, 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) {
|
||||
if (ContainsKey<V>(cacheKey)) {
|
||||
return Get<V>(cacheKey);
|
||||
}
|
||||
V val = create();
|
||||
Add(cacheKey, val, cacheDurationInSeconds);
|
||||
return val;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Remove<V>(string key) {
|
||||
this.Cache.Remove(key);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,9 @@
|
|||
using Falcon.SugarApi.DatabaseDefinitions.Cache;
|
||||
using Falcon.SugarApi.JsonSerialize;
|
||||
using Microsoft.Extensions.Caching.Distributed;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Falcon.SugarApi.DatabaseDefinitions
|
||||
|
@ -93,5 +94,15 @@ namespace Falcon.SugarApi.DatabaseDefinitions
|
|||
this.ConfigureExternalServices ??= new ConfigureExternalServices { };
|
||||
this.ConfigureExternalServices.DataInfoCacheService = new HttpRuntimeCache();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分布式缓存
|
||||
/// </summary>
|
||||
/// <param name="cache">缓存提供程序</param>
|
||||
/// <param name="serialize">序列化实现</param>
|
||||
public void AddDistributedCache(IDistributedCache cache, IJsonSerialize serialize) {
|
||||
this.ConfigureExternalServices ??= new ConfigureExternalServices { };
|
||||
this.ConfigureExternalServices.DataInfoCacheService = new DistributedCache(cache,serialize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user