在整个网站上设置标志的正确方式

本文关键字:方式 标志 设置 网站 | 更新日期: 2023-09-27 18:00:32

如果在整个站点中将标志设置为true,则必须显示多个局部视图。

我在web.config文件的appSettings中硬编码了该标志,并且运行良好。但现在这个标志必须通过我们的后端设置。

这个网站有很多流量,我需要一种适当的方式来访问,我觉得仅仅为了检查这个标志而发出SQL请求是一种过度行为。

我曾经考虑过阅读一个包含标志的简单txt文件,但我不知道它是否仍然"太多"。

最优化的方式是什么?

在整个网站上设置标志的正确方式

查看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;
            }
        }
    }
}

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