C#缓存操作
1.缓存辅助方法类的接口代码:
public interface IThrottleStore { /// <summary> /// 试图获取值 /// </summary> /// <param name="key"></param> /// <param name="entry"></param> /// <returns></returns> bool TryGetValue(string key, out ThrottleEntry entry); /// <summary> /// 增量请求 /// </summary> /// <param name="key"></param> void IncrementRequests(string key); /// <summary> /// 反转 /// </summary> /// <param name="key"></param> void Rollover(string key); /// <summary> /// 清除 /// </summary> void Clear(); }
2.缓存辅助方法的实体类代码:
/// <summary> /// 调节实体 /// </summary> public class ThrottleEntry { /// <summary> /// 开始时间 /// </summary> public DateTime PeriodStart { get; set; } /// <summary> /// 请求 /// </summary> public long Requests { get; set; } /// <summary> /// 构造函数 /// </summary> public ThrottleEntry() { PeriodStart = DateTime.UtcNow; Requests = 0; } }
3.缓存辅助类的实现代码:
public class InMemoryThrottleStore : IThrottleStore { /// <summary> /// 定义类型字段时,采用线程安全字典 /// </summary> private readonly ConcurrentDictionary<string, ThrottleEntry> _throttleStore = new ConcurrentDictionary<string, ThrottleEntry>(); public bool TryGetValue(string key, out ThrottleEntry entry) { return _throttleStore.TryGetValue(key, out entry); } public void IncrementRequests(string key) { _throttleStore.AddOrUpdate(key, k => { return new ThrottleEntry() { Requests = 1 }; }, (k, e) => { e.Requests++; return e; }); } public void Rollover(string key) { ThrottleEntry dummy; _throttleStore.TryRemove(key, out dummy); } public void Clear() { _throttleStore.Clear(); } }
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。如果需要获取最新的优秀.NET博文,请关注微信公众号“DotNet技术分享”。
爱知求真,静心钻研,虚心学习,务实创新,细致平和。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App