【问题标题】:Caching dynamically changing list of objects缓存动态变化的对象列表
【发布时间】:2014-05-21 12:28:34
【问题描述】:

我有一个关于如何有效地缓存对象列表的问题。我有一个Trips 的样本表。每个Trip 都有DateFromDateTo。我想缓存Trips 的列表。

我考虑的第一种方法是在 x 分钟内获取Trips 表单数据库和Trips ValueObjects 的缓存列表(我的值对象是指在列表中显示旅行所需的所有数据)。这种方法非常简单,但有一些缺点: - 处理分页 - 如果我逐页存储它们(例如使用键 TripsP1TripsP2 等...)。当 GUI 上的页面大小发生变化时,我将不得不使用不同的键(例如键 TripsP1Size1TripsP1Size2 等...) - 如何处理排序列表?为每个过滤器组合保留一组具有不同键的Trips?

我考虑的第二种方法是为每个请求点击数据库,但只从数据库中获取Trip.Id。接下来我想从缓存中获取每个Trip ValueObject。创建或修改Trip 后,我会将它们放入缓存中,并以TripId 为键。此外,如果由于某种原因我在缓存中找不到Trip ValueObject,我会将其从数据库中取出并放入缓存中。

哪种方法更好?或者您可以提出一些更有效的方法?

【问题讨论】:

    标签: c# sql performance caching memcached


    【解决方案1】:

    我不明白为什么要以页面的形式保存这些旅行。

    为什么不将所有行程加载到一个列表中(可以排序,取决于您的需要),并为 Linq 搜索查询建立一个内存索引?例如this lib

    您可以在缓存的内存索引中创建快速搜索,具体取决于您的应用程序查询模式。

    如果您担心在事务进行时 Trips 会发生变化(所有缓存都忽略了这一点),您应该使用 Immutable 集合来实现它(并使 Trip 成为不可变类型)。

    这样,当用户要求服务器提供具有特定条件的项目时,您可以轻松选择这些项目并为其提供 IQueryable(IEnumarable 序列)方法来获取数据流。

    希望这会有所帮助,Ofir。

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2018-03-29
      • 2011-03-04
      • 2012-12-31
      • 1970-01-01
      • 2011-04-22
      • 2018-02-13
      • 2013-03-22
      • 2011-02-10
      相关资源
      最近更新 更多