【问题标题】:How to refresh xml cache after one day from the last modified date?如何从上次修改日期起一天后刷新 xml 缓存?
【发布时间】:2010-10-05 23:48:12
【问题描述】:

我正在使用 ASP.NET 2.0 (C#) 开发一个 Web 应用程序,我在主页上显示最近添加的记录。添加记录的频率约为每天 1-5 条记录,因此我决定不通过每次从数据库服务器获取最近的记录来在 sql 服务器上增加太多开销。

所以,为了缓存数据,我使用了 XML 文件,我从数据集(.NET 中的 ds.WriteXML 函数)生成了 XML 文件,现在让我们说今天(2008 年 1 月 10 日 12:30:00)我已创建文件 recent-cache.xml 已创建。所以,最近的缓存文件有效期为一天。

如果当前日期和最后修改日期之间的差异大于或等于 1 天,则必须使用来自 db 服务器的新数据再次生成缓存 xml 文件。

所以,我想要代码,我可以使用它来获取 xml 文件的最后修改日期,然后找到(当前和文件最后修改日期)日期之间的差异。

还请告诉我我认为更好的解决方案,或者我们可以做任何其他事情,其他一些简单快捷的技术。

谢谢

【问题讨论】:

    标签: c# asp.net datetime dataset


    【解决方案1】:

    您可能会考虑使用 ASP.NET 缓存 API,它的存在是为了完成您所描述的那种工作。您可以将任何对象(如 XmlDocument 或 DataSet)添加到 Cache 集合中,并指定您希望它在其中保留多长时间,如下所示:

    Cache.Insert("MyCacheKey", myObjectToCache, null, DateTime.Now.AddDays(1), null);
    

    然后您可以使用如下函数获取缓存数据:

    const string CACHE_KEY = "MyCacheKey";
    
    private DataSet RecentlyAdded()
    {
        if(Cache[CACHE_KEY] == null)
            Cache.Insert(CACHE_KEY, GetRecentlyAddedFromDatabase(), null, DateTime.Now.AddDays(1), null);
        return Cache[CACHE_KEY];
    }
    

    缓存 API 有许多其他的整洁功能,但这将完成您想要的,而无需推出您自己的基于文件的解决方案。

    请注意,如果您的应用在一天结束之前关闭,缓存将随之关闭,并且“最近添加”的数据库查询将不得不在下次请求数据时再次运行。

    编辑:将缓存键更改为字符串常量,因此只需指定一次。

    【讨论】:

    • 嗨,巴里,非常好的技巧。但我担心,使用您建议的方式缓存数据会在我的网络服务器上增加负载(我在带宽有限的共享主机上)?或者它会消耗与我基于 FILE 的方法相同的资源?
    • 还有一个,“编辑:为了更好的代码,考虑使用字符串常量作为键。”我没有清楚地了解这条线,你能解释一下吗?谢谢!
    • 嗨,Prashant,ASP.NET 缓存可能会将项目保存在内存中,因此,如果您有数百兆字节的数据集或其他数据,您可能希望转至磁盘以节省内存。我认为该项目必须非常大,以证明这一点。
    • 第一个问题的更多信息:从文件切换到缓存与带宽没有任何关系,这一切都发生在服务器内部。
    • 谢谢巴里,它真的很有帮助。再次感谢:)
    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2021-02-22
    • 2014-07-12
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多