asp.net-mvc - ASP.NET MVC 3 内存中数据存储

标签 asp.net-mvc caching in-memory

我有一个项目,它为用户提供当前需要完成的任务列表。任何用户都可以完成任何任务,因此为了确保一次只有一个用户正在处理一项任务,我需要能够“锁定”它。我为此使用 SignalR,因此用户请求锁定任务,如果他们成功(即,如果没有其他人锁定它),那么他们将能够访问他们需要的更多信息。

我的问题是如何存储锁定任务的列表。最初的计划只是向任务表添加一个额外的位字段“IsLocked”,并在用户请求锁定和任务解锁时更新此位字段。然而,我们有大约 300 个并发用户,一个任务只需要大约 3-4 分钟,这意味着数据库上有大量的额外查询和微小查询。因此,我们想知道内存存储,只需将任务 ID 列表存储在“lockedTasks”列表中即可。

我曾考虑过使用缓存,但不确定实现此目的的最佳方法,或者即使存在更好的替代方案。如果有人有这方面的经验,那么一些建议会很好,谢谢

最佳答案

我会完全避免内存,因为 IIS 不太擅长使用内存,如果您发现 IIS 由于某种原因需要刷新应用程序池,那么您的列表就消失了!

也许是MemCache 系统?如果按照上面的方式没有丢失东西,但是...

我建议在中间,IO 文件向数据库请求数据的速度很快,特别是如果它不在同一台机器上(出于安全原因,它永远不应该在同一台机器上),所以......为什么不呢,只是为了保存您的列表,您不使用当前著名的 NoSQL 数据库之一?

MongoDB是一个文档数据库,具有 .NET Library而且它很容易使用,它不像内存那么快,但比物理数据库快得多,可以满足您的需求。

通常,NoSQL 数据库将托管在 App_Data 文件夹中,因此访问速度非常快,您只需将 task_iduser_id 所有锁定任务。

关于asp.net-mvc - ASP.NET MVC 3 内存中数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7607841/

相关文章:

c# - 我如何使 .Include 在 IEnumerable 上工作

java - 如果存在强引用,保证返回现有对象的线程安全对象池?

database - 内存数据库和关系数据库+NoSQL数据库有什么区别?

java - 将内存中的类日志重定向到 ObjectOutputStream

C++ 内存中键值存储

c# 正则表达式,只允许数字和字母不起作用

asp.net-mvc - Html.Raw 给出错误

javascript - 使用ajax以mvc模式通过 Controller 发送数据

android - 删除缓存文件 - WebView Android 4.4+

Swift - 加载 PNG 而不缓存