Azure Redis缓存:是否可以在集成测试中连接到缓存?

时间:2017-08-01 14:24:09

标签: c# azure azure-redis-cache

我正在针对Azure Redis缓存运行集成测试。这是我非常简单的缓存实现:

public class RedisCacheEngine : ICacheEngine
{
    private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        var config = new ConfigurationService();
        var connectionString = config.Get("Redis.ConnectionString");
        var connection = ConnectionMultiplexer.Connect(connectionString);
        return connection;
    });

    private static ConnectionMultiplexer Connection => LazyConnection.Value;

    public TValue Get<TValue>(string key) where TValue : class
    {
        var redisValue = Connection.GetDatabase().StringGet(key);
        return redisValue == RedisValue.Null 
            ? default(TValue) 
            : JsonConvert.DeserializeObject<TValue>(redisValue);
    }

    public void Set<TValue>(string key, TValue value) where TValue : class => 
        Connection.GetDatabase().StringSet(key, JsonConvert.SerializeObject(value));

    public void Remove(string key) => Connection.GetDatabase().KeyDelete(key);
}

当我查看调试器中的connection对象时,其failureMessage字段读取&#34; PING&#34;上的SocketFailure。我不相信服务器超时,因为超时窗口是一个慷慨的五秒钟而且我在一个快速系统上,连接速度很快。

连接字符串是标准的Azure Redis缓存字符串,格式为

myapp.redis.cache.windows.net:6380,password = ___,SSL =真,abortConnect =假

我尝试过设置ssl = False,但没有成功。

我希望能够在我的构建环境中运行这些测试,但目前我无法检索有效连接。在文档中我无法看到任何明显的遗漏。我可以运行任何检查以确保我做正确的事吗?

1 个答案:

答案 0 :(得分:0)

  

是否可以在集成测试中连接到缓存?

是的,我直接使用 connectionString 对您提到的代码进行演示,它可以正常使用。

 private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() =>
        {
            var connectionString = "mytest.redis.cache.windows.net:6380,password=xxxxxxxx,ssl=True,abortConnect=False";
            var connection = ConnectionMultiplexer.Connect(connectionString);
            return connection;
        });

根据异常消息 PING上的SocketFailure ,我假设您的开发环境防火墙阻塞端口 6379,6380

如果您的redis服务是高级定价等级,请检查是否存在阻止客户端连接的防火墙规则。

如果您的网络位于防火墙后面,请尝试确保端口已打开。或者请尝试使用其他网络环境。

enter image description here