Azure Redis缓存获取和设置复杂类型

时间:2015-03-18 10:35:40

标签: c# caching azure redis azure-caching

我正在创建一个POC,看看我们是否可以在下一个项目中使用azure redis缓存。我查看了这个MSDN文档http://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/#connect-to-cache

并有以下问题/怀疑:

  1. 连接到redis的唯一方式(优雅)是通过以下代码?是不是可以像配置Redis Cache一样工作吗?
  2.   

    ConnectionMultiplexer连接=   ConnectionMultiplexer.Connect(" contoso5.redis.cache.windows.net,SSL =真,密码= ...&#34);

    1. 我们需要在上面调用并连接到每个Get和Set的redis?如果不是,我们怎么只能打电话一次并重复使用?

    2. 我只能看到StringGet和StringSet。是否可以设置复杂的.NET类型?例子会很好。以下是我过去使用专用azure缓存或ent.Lib缓存所做的事情。

    3.   

      公共类CacheManager       {

          public void AddToCache(string Id, T value)
          {
              string Key = this.MakeKey(Id);
      
              if (this.m_Cache.Contains(Key))
              {
                  this.m_Cache.Remove(Key);
              }
              ------
              this.m_Cache.Add(Key, value,CacheItemPriority.Normal, null, expireTime);
          }         }
      

2 个答案:

答案 0 :(得分:1)

您可以拥有ConnectionMultiplexer的单个实例,并将其用于整个应用程序。您不需要为每个Get / Set调用创建一个。 您可以找到示例http://azure.microsoft.com/blog/2014/06/05/mvc-movie-app-with-azure-redis-cache-in-15-minutes/。我正在复制下面的相关代码

  private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
      {

      var config = new ConfigurationOptions();
            config.EndPoints.Add(cachename);
            config.Password = password;
            config.Ssl = true;
            config.SyncTimeout = 150;

           return ConnectionMultiplexer.Connect(config);
      });

您也可以将对象存储在缓存中。我上面提到的相同链接显示了如何将.NET对象序列化到缓存中。

答案 1 :(得分:1)

是的,您希望重用由ConnectionMultiplexer创建的Connect实例。所以静态变量方法应该很好。

关于保存Poco对象,当然是可能的,但对于除了一些基本类型之外的任何其他东西,您必须序列化和反序列化对象。哪个可能很慢。 特别是如果您使用二进制格式化程序,如pranav rastogi的答案示例所示。

我会将对象的值存储在缓存中,以便您只在缓存中存储非复杂类型,如字符串,字节数组,整数等...或者使用更快的序列化方法。甚至Json序列化通常要快得多。

如果您不想自己实现所有这些并且只想要一个强类型的缓存系统,您也可以使用我的CacheManager,它也支持Redis,基于StackExchange.Redis客户端。 ..

虽然我不得不承认我也使用BinaryFormatter进行序列化,如果它是你想要存储的未知类型。但这可能会改变,我也可能会支持Protobuf和Json ......