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

C# Azure Redis缓存获取和设置复杂类型,c#,caching,azure,redis,azure-caching,C#,Caching,Azure,Redis,Azure Caching,我正在创建一个POC,看看我们是否可以在下一个项目中使用azure redis缓存。我看了一下这个MSDN文档 并有以下问题/疑问: 连接到redis的唯一方法(优雅)是通过下面的代码?在配置和运行Redis缓存时,是否不可能执行与Redis缓存相同的操作 连接多路复用器连接= ConnectionMultiplexer.Connect(“contoso5.redis.cache.windows.net,ssl=true,password=…” 我们需要为每一个Get和Set调用上面的命令并连接

我正在创建一个POC,看看我们是否可以在下一个项目中使用azure redis缓存。我看了一下这个MSDN文档

并有以下问题/疑问:

  • 连接到redis的唯一方法(优雅)是通过下面的代码?在配置和运行Redis缓存时,是否不可能执行与Redis缓存相同的操作
  • 连接多路复用器连接= ConnectionMultiplexer.Connect(“contoso5.redis.cache.windows.net,ssl=true,password=…”

  • 我们需要为每一个Get和Set调用上面的命令并连接到redis?如果不是,我们怎么能只打一次电话,然后再使用

  • 我只能看到StringGet和StringSet。也可以设置复杂的.NET类型吗?以身作则就好了。下面是我过去使用专用azure缓存或ent.Lib缓存所做的工作

  • 公共类缓存管理器 {


    您可以拥有ConnectionMultiplexer的单个实例,并将其用于整个应用程序。您不需要为每个Get/Set调用创建一个实例。 你可以找到一个例子。我正在复制下面的相关代码

      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);
          });
    
    private static Lazy lazyConnection=new Lazy(()=>
    {
    var config=新配置选项();
    config.EndPoints.Add(cachename);
    config.Password=密码;
    config.Ssl=true;
    config.SyncTimeout=150;
    返回ConnectionMultiplexer.Connect(配置);
    });
    

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

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

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

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

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

    虽然我不得不承认,如果您想存储未知类型的二进制格式化程序,我也在使用它进行序列化。但这可能会改变,我可能还支持Protobuf和Json

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