Cashe的使用
1.CacheHelper
public class CacheHelper { public static ObjectCache Cache { get { return MemoryCache.Default; } } public static bool TryGetCache<T>(string key, ref T value) { object v = null; //Type t = typeof(T); bool hit; hit = TryGetCacheObject(key, ref v); if (hit) value = (T)v; return hit; } //public static bool TryGetCache(string key, ref bool value) //{ // return TryGetCacheStruct(key, ref value); //} //public static bool TryGetCache(string key, ref int value) //{ // return TryGetCacheStruct(key, ref value); //} public static bool TryGetCacheStruct<T>(string key, ref T value) where T : struct { object v = null; bool hit = TryGetCacheObject(key, ref v); if (hit) value = (T)v; return hit; } public static bool TryGetCacheObject(string key, ref object value) { object v = Cache.Get(key); bool hit = false; if (v == null) hit = false; else if (v == DBNull.Value) { hit = true; value = null; } else { hit = true; value = v; } //TraceHelper.Trace("Cache", string.Format("TryGetCache({0}) = {1}", key, hit)); return hit; } public static bool ContainsCache(string key) { bool hit = Cache.Contains(key); //TraceHelper.Trace("Cache", string.Format("ContainsCache({0}) = {1}", key, hit)); return hit; } public static object GetCache(string key) { object v = Cache.Get(key); if (v == DBNull.Value) { return null; } //TraceHelper.Trace("Cache", string.Format("GetCache({0}) = {1}", key, v == null ? "null" : v.ToString())); return v; } public static void SetCache(string key, object value) { SetCache(key, value, CacheItemPolicy); } public static void SetCache(string key, object value, CacheItemPolicy policy) { object v = value; if (value == null) v = DBNull.Value; Cache.Set(key, v, policy); //TraceHelper.Trace("Cache", string.Format("SetCache({0}) = {1}", key, value == null ? "null" : value.ToString())); } public static CacheItemPolicy CacheItemPolicy { get { CacheItemPolicy policy = new CacheItemPolicy(); policy.SlidingExpiration = new TimeSpan(0, AppConfiguration.CacheSlidingExpirationInMins, 0); return policy; } } public static CacheItemPolicy AbsoluteCacheItemPolicy { get { CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(AppConfiguration.CacheAbsoluteExpirationInMins); return policy; } } public static void ClearCacheByPrefix(string prefix) { List<string> keys = new List<string>(); foreach (var c in Cache) { if (c.Key.StartsWith(prefix)) { keys.Add(c.Key); } } int count = keys.Count; foreach (var key in keys) { Cache.Remove(key); } //TraceHelper.Trace("Cache", string.Format("ClearCacheByPrefix({0}) = {1}", prefix, count)); } }
public class TestKey { public string Code { get; set; } public decimal CodeNo { get; set; } public override bool Equals(object obj) { TestKey v = obj as TestKey; if (v == null) return false; return v.Code== this.Code && v.CodeNo== this.CodeNo; } public override int GetHashCode() { int primeNo = 31; return (this.Code.GetHashCode() * primeNo + this.CodeNo.GetHashCode(); } }
public static HashSet<StopPaymentKey> GetAllFromCache() { string cachekey = "AllTestKeys"; HashSet<TestKey> set = null; if (!CacheHelper.TryGetCache(cachekey, ref set)) { set= GetAllTestKeys(); CacheItemPolicy policy = CacheHelper.AbsoluteCacheItemPolicy; //policy.RemovedCallback = (arg) => //{ // var newSet = GetAllTestCodes(); // CacheHelper.SetCache(cachekey, newSet, policy); //}; CacheHelper.SetCache(cachekey, stoppaymentSet, policy); } return set; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!