增加Redis缓冲和Json序列化组件

This commit is contained in:
falcon 2020-04-01 12:53:37 +08:00
parent 30a34a7dee
commit c551872c8f
6 changed files with 180 additions and 0 deletions

View File

@ -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>

View 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();
}
}

View 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);
}
}

View 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);
}
}
}

View 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,
});
}
}
}

View 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>();
}
}
}