【问题标题】:Start using Redis with ASP.NET开始在 ASP.NET 中使用 Redis
【发布时间】:2011-06-27 17:44:30
【问题描述】:

如何开始在 ASP.NET 中使用 Redis 数据库?

我应该安装什么以及我应该下载什么?

我正在使用带有 C# 的 Visual Studio 2008。

【问题讨论】:

    标签: c# asp.net redis


    【解决方案1】:

    仅供参考,两个:

    是仅使用 ServiceStack.Redis C# 客户端的开源 ASP.NET Web 应用程序。

    Here is an example 您将如何使用 Inversion of control (IoC) 容器来注册 Redis 客户端连接池及其随附的 IRepository 与 IoC:

    //Register any dependencies you want injected into your services
    container.Register<IRedisClientsManager>(c => new PooledRedisClientManager());
    container.Register<IRepository>(c => new Repository(c.Resolve<IRedisClientsManager>()));
    

    注意:如果您刚开始接触客户,我建议您通过C# Client Wiki,尤其是Designing a Simple Blog application with Redis tutorial*。

    【讨论】:

    • 如果 IoC 容器支持,是否建议在单例范围内注册 IRedisClientsManager(即 Funq 中的 ReusedWithin(ReuseScope.Container) 或带有 Ninject 的 InSingletonScope())?
    • 是的,它维护实例上的连接池。为了有用,客户端连接应该从同一个池中管理。注意:Funq 默认是单例的,不需要显式。
    • 啊,我错过了关于 Funq 默认为单例的一点。这解释了为什么它在我见过的任何示例中都不明确。 (我习惯于 Ninject,其中瞬态范围是默认值。)感谢您指出这一点。
    【解决方案2】:

    您可以使用 servicestack 驱动程序从 C# 访问 Redis 实例。您可以从its GitHub repository下载代码。

    【讨论】:

    【解决方案3】:

    推荐您StackExchage.Redis ASP.net 客户端库。正如您在这篇 MSDN 文章中看到的,由 Microsoft 推荐。它是免费和开源的。 另请查看可用 Redis 客户端的完整列表:http://redis.io/clients

    对于在基于 Windows 的平台上安装 Redis 和使用客户端,请下载并安装 Redis Service (Server and Client Tools With Documentaion) Microsoft 编写。

    【讨论】:

      【解决方案4】:

      取自Integrating Redis in your Asp.Net MVC Project:
      首先要做的是在你的机器上安装 Redis。它是为 Linux 创建的,但对于 Windows 有一个简单的安装。事实上,微软有一个开源实现,你可以从这个GitHub页面下载安装。

      从 Nuget 安装 StackExchange.Redis。
      然后你可以这样使用它:

      public class RedisCache : ICache
      {
      private readonly ConnectionMultiplexer redisConnections;
      
      public RedisCache()
      {
          this.redisConnections = ConnectionMultiplexer.Connect("localhost");
      }
      public void Set<T>(string key, T objectToCache) where T : class
      {
          var db = this.redisConnections.GetDatabase();
          db.StringSet(key, JsonConvert.SerializeObject(objectToCache
                      , Formatting.Indented
                      , new JsonSerializerSettings
                      {
                          ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                          PreserveReferencesHandling = PreserveReferencesHandling.Objects
                      }));
      }
      
      
      public T Get<T>(string key) where T :class
      {
          var db = this.redisConnections.GetDatabase();
          var redisObject = db.StringGet(key);
          if (redisObject.HasValue)
          {
              return JsonConvert.DeserializeObject<T>(redisObject
                      , new JsonSerializerSettings
                      {
                          ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                          PreserveReferencesHandling = PreserveReferencesHandling.Objects
                      });
          }
          else
          {
              return (T)null;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 2017-06-12
        • 2011-08-25
        • 2012-07-20
        相关资源
        最近更新 更多