增加Redis缓冲和Json序列化组件
This commit is contained in:
parent
30a34a7dee
commit
c551872c8f
|
@ -12,6 +12,8 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Redis" Version="2.2.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.2.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
27
Falcon.Extend/ICacheProvider.cs
Normal file
27
Falcon.Extend/ICacheProvider.cs
Normal file
|
@ -0,0 +1,27 @@
|
|||
using System;
|
||||
|
||||
namespace Falcon.Extend
|
||||
{
|
||||
/// <summary>
|
||||
/// 数据缓冲提供器接口
|
||||
/// </summary>
|
||||
public interface ICacheProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 设置缓存数据
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据类型</typeparam>
|
||||
/// <param name="key">数据键</param>
|
||||
/// <param name="obj">数据对象</param>
|
||||
/// <param name="span">缓存时间或者从CacheTimeSpan选择值</param>
|
||||
void SetCache<T>(string key,T obj,TimeSpan span) where T : class;
|
||||
|
||||
/// <summary>
|
||||
/// 从缓存中获取数据,如果未缓存返回null
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据类型</typeparam>
|
||||
/// <param name="key">缓存数据的键</param>
|
||||
/// <returns>数据对象</returns>
|
||||
T GetObj<T>(string key) where T : class, new();
|
||||
}
|
||||
}
|
23
Falcon.Extend/IJsonProvider.cs
Normal file
23
Falcon.Extend/IJsonProvider.cs
Normal file
|
@ -0,0 +1,23 @@
|
|||
namespace Falcon.Extend
|
||||
{
|
||||
/// <summary>
|
||||
/// Json序列化接口
|
||||
/// </summary>
|
||||
public interface IJsonProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取Json字符串
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象类型</typeparam>
|
||||
/// <param name="obj">要序列化的对象</param>
|
||||
/// <returns>Json串</returns>
|
||||
string GetJson<T>(T obj);
|
||||
/// <summary>
|
||||
/// 获取对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象类型</typeparam>
|
||||
/// <param name="json">Json串</param>
|
||||
/// <returns>对象</returns>
|
||||
T GetObj<T>(string json);
|
||||
}
|
||||
}
|
29
Falcon.Extend/MsJsonProvider.cs
Normal file
29
Falcon.Extend/MsJsonProvider.cs
Normal file
|
@ -0,0 +1,29 @@
|
|||
using System.Text.Json;
|
||||
|
||||
namespace Falcon.Extend
|
||||
{
|
||||
/// <summary>
|
||||
/// 微软提供的Json序列化器封装
|
||||
/// </summary>
|
||||
public class MsJsonProvider:IJsonProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 从对象序列化字符串
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象类型</typeparam>
|
||||
/// <param name="obj">要序列化的对象</param>
|
||||
/// <returns>字符串</returns>
|
||||
public string GetJson<T>(T obj) {
|
||||
return JsonSerializer.Serialize<T>(obj);
|
||||
}
|
||||
/// <summary>
|
||||
/// 从字符串反序列化对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象的类型</typeparam>
|
||||
/// <param name="json">json字符串</param>
|
||||
/// <returns>对象实例</returns>
|
||||
public T GetObj<T>(string json) {
|
||||
return JsonSerializer.Deserialize<T>(json);
|
||||
}
|
||||
}
|
||||
}
|
61
Falcon.Extend/RedisCacheProvider.cs
Normal file
61
Falcon.Extend/RedisCacheProvider.cs
Normal file
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
using Microsoft.Extensions.Caching.Distributed;
|
||||
using Falcon.Extend;
|
||||
|
||||
namespace Falcon.Extend
|
||||
{
|
||||
/// <summary>
|
||||
/// 使用微软Redis扩展方法组件实现Redis缓冲
|
||||
/// </summary>
|
||||
public class RedisCacheProvider:ICacheProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 基础缓冲组件
|
||||
/// </summary>
|
||||
public IDistributedCache Cache { get; set; }
|
||||
/// <summary>
|
||||
/// 基础序列化组件
|
||||
/// </summary>
|
||||
public IJsonProvider Json { get; set; }
|
||||
/// <summary>
|
||||
/// 通过提供json序列化组件和基础缓冲组件实现Redis提供器
|
||||
/// </summary>
|
||||
/// <param name="jsonProvider">基础json序列化器</param>
|
||||
/// <param name="distributedCache">基础缓冲器</param>
|
||||
public RedisCacheProvider(IJsonProvider jsonProvider,IDistributedCache distributedCache = null) {
|
||||
this.Cache = distributedCache;
|
||||
this.Json = jsonProvider;
|
||||
}
|
||||
/// <summary>
|
||||
/// 通过key获取缓存对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象类型</typeparam>
|
||||
/// <param name="key">存储对象的key</param>
|
||||
/// <returns>缓存的对象</returns>
|
||||
public T GetObj<T>(string key) where T : class, new() {
|
||||
if(this.Cache == null) {
|
||||
return null;
|
||||
}
|
||||
var str = this.Cache.GetString(key);
|
||||
if(str.IsNullOrEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return this.Json.GetObj<T>(str);
|
||||
}
|
||||
/// <summary>
|
||||
/// 存储对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象的类型</typeparam>
|
||||
/// <param name="key">缓存的key</param>
|
||||
/// <param name="obj">要缓存的对象</param>
|
||||
/// <param name="span">缓存时长</param>
|
||||
public void SetCache<T>(string key,T obj,TimeSpan span) where T : class {
|
||||
if(this.Cache == null || obj == null || span == null || span == TimeSpan.Zero) {
|
||||
return;
|
||||
}
|
||||
this.Cache.SetString(key,this.Json.GetJson(obj),new DistributedCacheEntryOptions {
|
||||
AbsoluteExpirationRelativeToNow = span,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
38
Falcon.Extend/ServiceCollectionExtend.cs
Normal file
38
Falcon.Extend/ServiceCollectionExtend.cs
Normal file
|
@ -0,0 +1,38 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Microsoft.Extensions.Caching.Redis;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Falcon.Extend
|
||||
{
|
||||
/// <summary>
|
||||
/// ServiceCollection扩展
|
||||
/// </summary>
|
||||
public static class ServiceCollectionExtend
|
||||
{
|
||||
/// <summary>
|
||||
/// 通过提供RedisCacheOptions配置Redis实例
|
||||
/// </summary>
|
||||
/// <param name="services">服务集合</param>
|
||||
/// <param name="option">RedisCache参数</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddRedis(this IServiceCollection services,RedisCacheOptions option) {
|
||||
services.AddDistributedRedisCache(op => {
|
||||
op.InstanceName = option.InstanceName;
|
||||
op.Configuration = option.Configuration;
|
||||
});
|
||||
services.AddTransient<ICacheProvider,RedisCacheProvider>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加微软Json序列化器
|
||||
/// </summary>
|
||||
/// <param name="services">服务集合</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddMsJsonProvider(this IServiceCollection services) {
|
||||
return services.AddSingleton<IJsonProvider,MsJsonProvider>();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user