缓存动态更改对象列表

时间:2014-04-08 16:46:32

标签: c# sql performance caching memcached

我有一个关于如何有效缓存对象列表的问题。我有一个Trip s的示例表。每个Trip都有DateFromDateTo。我想缓存Trip s。

的列表

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

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

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

1 个答案:

答案 0 :(得分:0)

我不明白为什么要以Pages的形式举行这些旅行。

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

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

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

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

希望这会有所帮助,Ofir。