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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)

1、使用WCF请求与答复模式须知 (1)、客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2)、相比Duplex来讲,这种模式强调的是客户...

21110
来自专栏恰同学骚年

自己动手模拟开发一个简单的Web服务器

开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此...

1703
来自专栏林德熙的博客

win10 uwp 网络编程 带Header的WebRequest获取BufferHttpClient 使用 Cookie

上面传输的头,Head=Head+length 中的第二个Head,包含 传输者id,当前传输是传输的消息最后一段还是中间,当前传输 是服务器第消息

711
来自专栏pangguoming

C#开发微信公众平台-就这么简单(附Demo)

  最近公司在做微信开发,其实就是接口开发,网上找了很多资料,当然园友也写了很多教程,但都是理论说了一大堆,实用指导或代码很少。如果你自己仔细研究下,其实就那么...

1111
来自专栏跟着阿笨一起玩NET

无法将类型“System.Collections.Generic.IEnumerable<EmailSystem.Model.TemplateInfo>”隐式转换为“System.Collection

1581
来自专栏王磊的博客

ASP.NET 缓存 Cache

ASP.NET 提供一个功能完整的缓存引擎,页面可使用该引擎通过 HTTP 请求存储和检索任意对象. 缓存的生存期与应用程序的生存期相同,也就是说,当应用程序重...

4205
来自专栏逸鹏说道

MVC5 网站开发之九 网站设置

网站配置一般用来保存网站的一些设置,写在配置文件中比写在数据库中要合适一下,因为配置文件本身带有缓存,随网站启动读入缓存中,速度更快,而保存在数据库中要单独为一...

2825
来自专栏张善友的专栏

自定义AuthorizeAttribute

网站的权限判断是一个非常普遍的需求,从文章ASP.NET MVC的Action Filter中我们知道实现这样的需求只要从AuthorizeAttribute集...

19510
来自专栏码农阿宇

EF Core利用Transaction对数据进行回滚保护

What? 首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用...

3265
来自专栏菩提树下的杨过

img标签的src=""会引起的Page_Load多次执行

今天看见园子里有人因img的src为空导致session丢失,详情见http://www.cnblogs.com/kyneblog/archive/2009/0...

21010

扫码关注云+社区