在整个站点上设置标志的正确方法

时间:2015-06-30 10:53:02

标签: c# asp.net asp.net-mvc

如果在整个网站上将标记设置为true,则必须显示多个部分视图。

我在appSettings文件的web.config内部对该标记进行了硬编码,效果很好。但现在必须通过我们的后端设置此标志。

该网站有很多流量,我需要一个正确的方法来达到这个目标,我觉得只是为了检查这个标志是一个过度杀毒的SQL请求。

我虽然读过一个包含该标志的简单txt文件,但我不知道它是否仍然过多"。

最优化的方式是什么?

2 个答案:

答案 0 :(得分:3)

结帐MemoryCache。您可以创建一个带有静态属性的基本静态类来返回缓存的标志值,然后您可以将绝对到期定义为您可以使用的任何舒适级别(5秒或60分钟或任何时间跨度),您可以在其上更新缓存中的值。

这是处理线程的一个非常快速的例子。

public static class CacheStore
{
    private static readonly string _keyMySharedFlag = "shared.flag";
    private static readonly object _lockMySharedFlag = new object();
    public static bool MySharedFlag
    {
        get
        {
            var cachedFlag = (bool?)MemoryCache.Default.Get(_keyMySharedFlag);
            if (cachedFlag != null)
                return cachedFlag.Value;
            lock (_lockMySharedFlag)
            {
                // Confirm no other threads wrote to cache while we waited
                cachedFlag = (bool?)MemoryCache.Default.Get(_keyMySharedFlag);
                if (cachedFlag != null)
                    return cachedFlag.Value;
                bool? newFlag = true; // Set to your database value
                var cachePolicy = new CacheItemPolicy();
                cachePolicy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5); // 5 minutes
                MemoryCache.Default.Set(_keyMySharedFlag, newFlag, cachePolicy);
                return newFlag.Value;
            }
        }
    }
}

答案 1 :(得分:0)

我建议定义一个全局配置类,其中包含所有标志,公共数据,并使用依赖注入将其注入到您需要的位置。这将导致我相信更可测试的解决方案。