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

Azure Redis Cache Get and Set Complex Types

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

并有以下 questions/doubts:

  1. 连接到 redis 的唯一方式(优雅)是通过下面的代码?难道不能像配置 Redis 缓存一样工作吗?

ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,ssl=true,password=...");

  1. 我们需要在上面调用并为每个Get和Set连接到redis吗?如果不是,我们如何只调用一次并重新使用?

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

public class 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);
    }         }

您可以拥有一个 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);
      });

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

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

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

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

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

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