1. 新增API版本枚举SDK项,创建SDK基础控制器 2. 添加IList、string扩展方法,新增时间戳扩展工具 3. 新增OSS配置、STS凭证服务、文件处理相关代码 4. 重构Redis缓存组件,替换StackExchange.Redis为CSRedisCore 5. 修复原有Redis操作方法调用,新增基础控制器快捷返回方法 6. 新增阿里云OSS、短信、VOD相关SDK依赖 7. 配置阿里云OSS相关参数到appsettings
107 lines
3.6 KiB
C#
107 lines
3.6 KiB
C#
using CSRedis;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace QYZH.InteractiveMagazine.Infrastructure.Redis
|
|
{
|
|
public static class RedisExtensions
|
|
{
|
|
public static TimeSpan expireSecond = TimeSpan.FromMinutes(20);
|
|
|
|
/// <summary>
|
|
/// AddCSRedisCacheExtension
|
|
/// </summary>
|
|
/// <param name="services"></param>
|
|
/// <param name="setupAction"></param>
|
|
/// <returns></returns>
|
|
public static IServiceCollection AddCSRedisCacheExtension(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
if (services == null)
|
|
throw new ArgumentNullException("services");
|
|
|
|
if (configuration == null)
|
|
throw new ArgumentNullException("configuration");
|
|
|
|
var redisOptions = configuration.Get<RedisCacheOption>();
|
|
services.AddSingleton(redisOptions);
|
|
var csredis = new CSRedisClient(redisOptions.ConnectionString, redisOptions.Sentinels, redisOptions.ReadOnly);
|
|
RedisHelper.Initialization(csredis);
|
|
services.AddSingleton(csredis);//csredis注册为单例
|
|
//services.AddSingleton<IDistributedCache>(new Microsoft.Extensions.Caching.Redis.CSRedisCache(RedisHelper.Instance));
|
|
|
|
return services;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取缓存,如果换成不存在则执行方法生成缓存
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="key"></param>
|
|
/// <param name="factory"></param>
|
|
/// <param name="validFor"></param>
|
|
/// <returns></returns>
|
|
public static T GetOrSet<T>(this CSRedisClient redisCache, string key, Func<T> factory, TimeSpan? expireTime = null) where T : class
|
|
{
|
|
var result = redisCache.Get<T>(key);
|
|
if (factory != null && result == null)
|
|
{
|
|
result = factory();
|
|
if (expireTime == null || !expireTime.HasValue)
|
|
expireTime = expireSecond;
|
|
|
|
redisCache.Set(key, result, expireTime.Value);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取缓存,如果缓存不存在则执行方法生成缓存
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="key"></param>
|
|
/// <param name="factory"></param>
|
|
/// <param name="validFor"></param>
|
|
/// <returns></returns>
|
|
public static async Task<T> GetOrSetAsync<T>(this CSRedisClient redisCache, string key, Func<T> factory, TimeSpan? expireTime = null)
|
|
{
|
|
var result = await redisCache.GetAsync<T>(key);
|
|
if (result == null && factory != null)
|
|
{
|
|
result = factory();
|
|
|
|
if (expireTime == null || !expireTime.HasValue)
|
|
expireTime = expireSecond;
|
|
|
|
if (result != null)
|
|
await redisCache.SetAsync(key, result, expireTime.Value);
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public class RedisCacheOption
|
|
{
|
|
/// <summary>
|
|
/// 连接字符串
|
|
/// </summary>
|
|
public string ConnectionString { get; set; }
|
|
|
|
/// <summary>
|
|
/// 哨兵设置
|
|
/// </summary>
|
|
public string[] Sentinels { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否只读
|
|
/// </summary>
|
|
public bool ReadOnly { get; set; } = false;
|
|
|
|
public int[] ExpireSecondRange { get; set; }
|
|
|
|
public int? ExpireSecond { get; set; } = 3600;
|
|
}
|
|
}
|