在整个网站上设置标志的正确方式
本文关键字:方式 标志 设置 网站 | 更新日期: 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;
}
}
}
}
我建议定义一个全局配置类,其中包含所有标志和公共数据,并使用依赖注入将其注入到需要的位置。我相信,这将带来一个更具可测试性的解决方案。