【问题标题】:Caching jquery autocomplete data in memory在内存中缓存 jquery 自动完成数据
【发布时间】:2014-06-10 17:37:48
【问题描述】:

如果我有一个包含国家/州/省/市/纬度/经度的表,其中包含数千条记录,并且我正在使用它来自动完成搜索页面上的字段,那么缓存此数据的最佳方法是什么进入内存以使网站更快一点?我应该将所有表数据放入全局应用缓存中还是有更好的方法?

【问题讨论】:

  • 请编码!在代码后面的内存中?,在浏览器的内存中?,在浏览器的缓存中?
  • 我不知道哪个是最好的,这就是我问的原因?我只想对客户端做出最快的响应,并且对我的服务器产生最少的负担,这样我就不必在我的数据库上运行该查询 ~10,000/天!
  • 这里没有最好的,您可以寻找有关如何制作它的设计答案,但这里没有给出一些代码。

标签: jquery asp.net asp.net-mvc asp.net-mvc-4 jquery-ui-autocomplete


【解决方案1】:

使用来自 ajax 请求的响应填充您的自动完成功能。只需调用控制器上的方法并返回 JsonResult。这将允许您利用可应用于方法的输出缓存属性。

    [OutputCache(Duration=1000, VaryByParam="*", Location="Any")]
    public JsonResult AutoComplete(string term)
    {
        var result = //Database query
        return Json(result, JsonRequestBehavior.AllowGet);
    }

这会将结果缓存在服务器或客户端上,并为传递给该方法的每个搜索参数创建一个新的缓存实例。

您甚至可以将缓存配置文件与输出缓存一起使用,这将允许您在 webconfig 中使用缓存选项并允许您在将来轻松更新。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    有多种选择,在不了解您的用例的情况下说哪个(如果有)更好是一个太复杂的问题。

    在服务器端,用于从数据库中检索选项的代码可以使用 MemoryCache 从缓存中提取(如果存在)。

    var records = MemoryCache.Default.Get("LocationRecords");
    if(records == null)
    {
        records = GetRecords(); // <-- the method you're using now to retrieve the records
    
        // Change this based on how long you want to cache things for
        var expiration = DateTimeOffset.Now.AddHours(6);
    
        MemoryCache.Default.Add("LocationRecords", expiration);
    }
    return records;
    

    您还可以设置客户端使用 AJAX GET 请求自行加载选项,并让服务器告诉客户端缓存它发回的信息,这样任何给定用户的浏览器都只会询问服务器数据一次。

    在这两种方法中,您都需要花时间考虑数据可以使用多长时间,并提出一个好的缓存/缓存清除/缓存清除策略。

    我应该将所有表数据放入全局应用缓存中还是有更好的方法?

    同样,这在很大程度上取决于您的情况。我个人更喜欢创建一个新的 MemoryCache 实例,我将它作为静态变量保存在我的每个存储库类型上。这样我可以避免键冲突的可能性,并且一次轻松地清除一个缓存而不影响其他缓存。但如果您的应用程序很小,只需使用MemoryCache.Default 就可以了。

    【讨论】:

    • 这会比用于存储许多 mb 数据的 asp.net 的缓存类更好吗?
    • @user1186050:我很确定 ASP.NET 的缓存类使用了 MemoryCache 在幕后。我只是不喜欢我的数据访问代码依赖于 ASP.NET 库,所以我更喜欢直接使用核心 MemoryCache 功能。
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2011-04-07
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2020-09-28
    相关资源
    最近更新 更多