寻找基于文件的缓存或存储库

时间:2011-12-13 14:30:43

标签: c# .net caching .net-2.0 storage

以下是我的要求:

  • 要使用的机制或库应该快速&高性能

  • 如果已经证明企业准备就绪,那就太棒了

  • 可以提供某种接口或合同来检索数据

  • 适用于C#,. NET 2.0

是的,有类似的问题,但没有一个解决我想要回答的问题。

上下文

我为单点登录应用程序开发了自定义成员资格和个人资料提供程序好的,只是我们希望通过会话在应用程序之间保留某些用户信息(这只有在会话状态存储在SQLServer DB上时才有可能),但我们绝不想这样做。我们还使用 UserId 主键作为进行CRUD操作的起点。

更多关于申请......

所以每次执行CRUD时我应该Membership.GetUser().ProviderUserKey点击数据库以检索用户的Id(我可以缓存这个但是在导航到其他应用程序时会再次失去这个,我还有很多其他应用程序需要相同处理的实体。)

我的想法

我当然肯定有一些库,我可以在这里使用的经过验证的方法。从某种意义上说

  1. 首次加载来自数据库

  2. 加载的数据存储在虚拟目录之外的全局文件存储库(我认为是一个文件)中,或者使用键值对或关系系统存储在某个地方。

  3. 对此文件进行后续请求并检索数据。(如果未找到密钥,则运行Sql server命令以检索再次存储在此文件中的值)

  4. 问题

    建议使用适用于.NET 2.0的快速,基于文件,原子,存储机制或库(类似于memcached但存储在文件上)。

2 个答案:

答案 0 :(得分:0)

如果您尝试优化的时间是查询和编写内存中的信息而不是从SQL服务器传输该信息的时间,您可以考虑使用SQL作为缓存机制。只需创建一个带有varbinary(max)列的记录来存储当前会话的序列化数据,以及一些标识该会话的唯一ID(如果您有多个会话)。您可能最终得到的是一个2阶段缓存 - 如果此应用程序已将信息加载到内存中,您可以使用它;如果没有,您可以查询缓存的SQL记录;如果不存在,您可以执行完整的查询来创建它。

编辑:我还建议您考虑Optimize Later哲学,如果您还没有。封装提供此数据的对象并根据需要对其进行优化。

答案 1 :(得分:0)

看起来你在谈论一个Web应用程序。您是否考虑过新HTML5 Web Storage API适用于您的案例?潜在的问题(不适合的原因)将是:1 - 不能要求客户拥有HTML5; 2 - 主要需要在服务器上提供信息,而不是客户端。