我正在创建一个POC,看看我们是否可以在下一个项目中使用azure redis缓存。我查看了这个MSDN文档http://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/#connect-to-cache。
并有以下问题/怀疑:
ConnectionMultiplexer连接= ConnectionMultiplexer.Connect(" contoso5.redis.cache.windows.net,SSL =真,密码= ...&#34);
我们需要在上面调用并连接到每个Get和Set的redis?如果不是,我们怎么只能打电话一次并重复使用?
我只能看到StringGet和StringSet。是否可以设置复杂的.NET类型?例子会很好。以下是我过去使用专用azure缓存或ent.Lib缓存所做的事情。
公共类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); } }
答案 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 ......