using System; using System.Collections.Generic; using System.Threading.Tasks; namespace HT.Cloud.Code { public abstract class BaseHelper : RedisHelper { } public abstract class HandleLogHelper : RedisHelper { } public class CacheHelper { private static string cacheProvider = GlobalContext.SystemConfig.CacheProvider; /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// 缓存时长h /// 是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) /// public static async Task SetAsync(string key, object value, int expiresIn = -1, bool isSliding = true) { return await SetBySecondAsync(key, value, expiresIn * 3600, isSliding); } /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// 缓存时长秒 /// 是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) /// public static async Task SetBySecondAsync(string key, object value, int expiresIn = -1, bool isSliding = true) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); if (value == null) throw new ArgumentNullException(nameof(value)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: if (expiresIn > 0) { await BaseHelper.SetAsync(key, value, expiresIn); } else { await BaseHelper.SetAsync(key, value); } return await ExistsAsync(key); case Define.CACHEPROVIDER_MEMORY: if (expiresIn > 0) { MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(expiresIn), isSliding); } else { MemoryCacheHelper.Set(key, value); } return await ExistsAsync(key); default: if (expiresIn > 0) { MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(expiresIn), isSliding); } else { MemoryCacheHelper.Set(key, value); } return await ExistsAsync(key); } } /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// 缓存时长秒 /// 是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) /// public static bool SetBySecond(string key, object value, int expiresIn = -1, bool isSliding = true) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); if (value == null) throw new ArgumentNullException(nameof(value)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: if (expiresIn > 0) { BaseHelper.Set(key, value, expiresIn); } else { BaseHelper.Set(key, value); } return Exists(key); case Define.CACHEPROVIDER_MEMORY: if (expiresIn > 0) { MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(expiresIn), isSliding); } else { MemoryCacheHelper.Set(key, value); } return Exists(key); default: if (expiresIn > 0) { MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(expiresIn), isSliding); } else { MemoryCacheHelper.Set(key, value); } return Exists(key); } } /// /// 获取缓存 /// /// 缓存Key /// public static async Task GetAsync(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: return await BaseHelper.GetAsync(key); case Define.CACHEPROVIDER_MEMORY: return MemoryCacheHelper.Get(key); default: return MemoryCacheHelper.Get(key); } } /// /// 获取缓存 /// /// 缓存Key /// public static T Get(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: return BaseHelper.Get(key); case Define.CACHEPROVIDER_MEMORY: return MemoryCacheHelper.Get(key); default: return MemoryCacheHelper.Get(key); } } /// /// 删除缓存 /// /// 缓存Key /// public static async Task RemoveAsync(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: await BaseHelper.DelAsync(key); break; case Define.CACHEPROVIDER_MEMORY: MemoryCacheHelper.Remove(key); break; } } /// /// 删除缓存 /// /// 缓存Key /// public static void Remove(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: BaseHelper.Del(key); break; case Define.CACHEPROVIDER_MEMORY: MemoryCacheHelper.Remove(key); break; } } /// /// 验证缓存项是否存在 /// /// 缓存Key /// public static async Task ExistsAsync(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: return await BaseHelper.ExistsAsync(key); case Define.CACHEPROVIDER_MEMORY: return MemoryCacheHelper.Exists(key); default: return MemoryCacheHelper.Exists(key); } } /// /// 验证缓存项是否存在 /// /// 缓存Key /// public static bool Exists(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException(nameof(key)); switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: return BaseHelper.Exists(key); case Define.CACHEPROVIDER_MEMORY: return MemoryCacheHelper.Exists(key); default: return MemoryCacheHelper.Exists(key); } } /// /// 缓存续期 /// /// 缓存Key /// 时间小时 /// public static async Task ExpireAsync(string key, int hour) { switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: await BaseHelper.ExpireAtAsync(key, DateTime.Now.AddHours(hour)); break; default: break; } } /// /// 缓存续期 /// /// 缓存Key /// 时间小时 /// public static void Expire(string key, int hour) { switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: BaseHelper.ExpireAt(key, DateTime.Now.AddHours(hour)); break; default: break; } } /// /// 清空缓存 /// /// 缓存Key /// public static async Task FlushAllAsync() { switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: await BaseHelper.NodesServerManager.FlushDbAsync(); break; case Define.CACHEPROVIDER_MEMORY: MemoryCacheHelper.RemoveCacheAll(); break; default: MemoryCacheHelper.RemoveCacheAll(); break; } } /// /// 清空缓存 /// /// 缓存Key /// public static void FlushAll1() { switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: BaseHelper.NodesServerManager.FlushDb(); break; case Define.CACHEPROVIDER_MEMORY: MemoryCacheHelper.RemoveCacheAll(); break; default: MemoryCacheHelper.RemoveCacheAll(); break; } } /// /// 不存在就插入 /// /// 缓存Key /// 缓存Value /// 过期时间 /// public static async Task SetNxAsync(string key, object value, int second = 10) { bool result = false; switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: result = await BaseHelper.SetNxAsync(key, value); await BaseHelper.ExpireAtAsync(key, DateTime.Now.AddSeconds(second)); break; case Define.CACHEPROVIDER_MEMORY: if (MemoryCacheHelper.Exists(key)) { result = false; MemoryCacheHelper.Get(key); } else { result = true; MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(second), true); } break; default: if (MemoryCacheHelper.Exists(key)) { result = false; MemoryCacheHelper.Get(key); } else { result = true; MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(second), true); } break; } return result; } /// /// 不存在就插入 /// /// 缓存Key /// 缓存Value /// 过期时间 /// public static bool SetNx(string key, object value, int second = 10) { bool result = false; switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: result = BaseHelper.SetNx(key, value); BaseHelper.ExpireAt(key, DateTime.Now.AddSeconds(second)); break; case Define.CACHEPROVIDER_MEMORY: if (MemoryCacheHelper.Exists(key)) { result = false; MemoryCacheHelper.Get(key); } else { result = true; MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(second), true); } break; default: if (MemoryCacheHelper.Exists(key)) { result = false; MemoryCacheHelper.Get(key); } else { result = true; MemoryCacheHelper.Set(key, value, TimeSpan.FromSeconds(second), true); } break; } return result; } public static async Task> GetAllKeyAsync() { switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: return await BaseHelper.KeysAsync("SqlSugarDataCache.*"); case Define.CACHEPROVIDER_MEMORY: return MemoryCacheHelper.GetCacheKeys(); default: return MemoryCacheHelper.GetCacheKeys(); } } public static IEnumerable GetAllKey() { switch (cacheProvider) { case Define.CACHEPROVIDER_REDIS: return BaseHelper.Keys("SqlSugarDataCache.*"); case Define.CACHEPROVIDER_MEMORY: return MemoryCacheHelper.GetCacheKeys(); default: return MemoryCacheHelper.GetCacheKeys(); } } } }