C# 缓存动态更改的对象列表

C# 缓存动态更改的对象列表,c#,sql,performance,caching,memcached,C#,Sql,Performance,Caching,Memcached,我有一个关于如何高效缓存对象列表的问题。我有一个Trips的样本表。每次行程都有DateFrom和DateTo。我想缓存Trips的列表 第一种方法是在X分钟获得跳转代码表单数据库和缓存列表>代码>跳转< /Cord>S ValueObjts(由值对象,我指的是在列表中显示行程所需的所有数据)。这种方法非常简单,但有一些缺点: -处理分页-如果我逐页存储它们(例如使用键TripsP1,TripsP2,等等)。当GUI上的页面大小改变时,我将不得不使用不同的键进行一组行程(例如使用键TripsP1

我有一个关于如何高效缓存对象列表的问题。我有一个
Trip
s的样本表。每次
行程
都有
DateFrom
DateTo
。我想缓存
Trip
s的列表

第一种方法是在X分钟获得<代码>跳转<代码>代码表单数据库和缓存列表>代码>跳转< /Cord>S ValueObjts(由值对象,我指的是在列表中显示行程所需的所有数据)。这种方法非常简单,但有一些缺点: -处理分页-如果我逐页存储它们(例如使用键

TripsP1
TripsP2
,等等)。当GUI上的页面大小改变时,我将不得不使用不同的键进行一组行程(例如使用键
TripsP1Size1
TripsP1Size2
等) -如何处理排序列表?为每个过滤器组合保留一组带有不同键的
Trip
s

第二种方法是考虑每个请求的HITTNG数据库,但只从数据库中获取代码>跳转.ID/COD>。接下来,我想从缓存中获取每个

Trip ValueObject
。创建或修改
Trip
后,我将把它们放在缓存中,并将
TripId
作为键。另外,如果出于某种原因,我在缓存中找不到
Trip ValueObject
,我会从数据库中取出它并放入缓存


以下哪种方法更好?或者你可以建议一些更有效的方法?

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

为什么不将所有行程加载到一个列表中(可以根据您的需要进行排序),并为Linq搜索查询构建内存索引?比如说

根据您的应用程序查询模式,您可以创建缓存的内存索引,以便进行快速搜索

如果您担心在事务进行过程中Trip会发生更改(所有缓存都忽略了这一点),那么应该使用不可变集合实现它(并使Trip为不可变类型)

通过这种方式,当用户要求服务器提供具有特定条件的项时,您可以轻松地选择这些项,并为其提供获取数据流的IQueryable(IEnumarable sequence)方法

希望这有帮助,Ofir