.Net如何通过SSL连接Redis

最近在使用.Net SignalR Reids时一直出现无法连接的情况,所以记录一下遇到的坑。

因为用到的是Azure Reids服务器,开启了SSL(6380端口),同时禁用了TLS1.1和TLS1.2,

正常如果不使用SSL(6380端口)的话可以直接连接就可以了,但是如果是SSL就需要做一些修改才可以连接。

SignalR 需要Nuget引用如下包(使用StackExchangeRedis):

同时Startup中连接代码如下(ssl和sslprotocols为关键参数,用于连接开启ssl的redis服务器):

public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
      
            //使用Redis方式进行连接,用于负载均衡场景
            var connString = $"xxxxx:6380,password=xxxx,ssl=true,abortConnect=false,sslprotocols=tls12";
            GlobalHost.DependencyResolver.UseStackExchangeRedis(new RedisScaleoutConfiguration(connString, "ChatHub"));
        }
    }

 

另外如果使用ServiceStack.Redis工具包的话需要做如下调整(password需要进行url编码):

public IRedisClient GetClient()
        {
            var password = HttpUtility.UrlEncode("xxxxx");
            var connString = $"redis://xxxx:6380?ssl=true&sslprotocols=Tls12&password={password}";
            var redisManager = new RedisManagerPool(connString);
            return redisManager.GetClient();
        }

 

ServiceStack.RedisStackExchangeRedis使用说明连接:

https://github.com/ServiceStack/ServiceStack.Redis#servicestackredis-ssl-support

https://gist.github.com/JonCole/925630df72be1351b21440625ff2671f#file-redis-bestpractices-stackexchange-redis-md

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在项目中安装 `StackExchange.Redis` 包。可以通过NuGet包管理器或者在项目文件中手动添加引用来完成安装。 以下是使用依赖注入方式连接redis并使用的示例代码: ```csharp // Startup.cs using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; public class Startup { private readonly IConfiguration _configuration; public Startup(IConfiguration configuration) { _configuration = configuration; } public void ConfigureServices(IServiceCollection services) { // 注册 Redis 连接对象 services.AddSingleton<IConnectionMultiplexer>(provider => { string redisConnectionString = _configuration.GetConnectionString("RedisConnection"); return ConnectionMultiplexer.Connect(redisConnectionString); }); // 注册 Redis 数据库操作对象 services.AddScoped<IDatabase>(provider => { IConnectionMultiplexer redisConnection = provider.GetService<IConnectionMultiplexer>(); return redisConnection.GetDatabase(); }); // 注册其他服务 // ... } } ``` 在上面的示例代码中,我们首先注册了一个 `IConnectionMultiplexer` 类型的单例对象,该对象用于连接 Redis 数据库。然后,我们注册了一个 `IDatabase` 类型的对象,该对象用于操作 Redis 数据库中的数据。在注册 `IDatabase` 对象时,我们使用了 `AddScoped` 方法,这意味着每次请求都会创建一个新的 `IDatabase` 对象。 在代码中,我们还使用了 `IConfiguration` 对象来获取 Redis 数据库的连接字符串。我们需要在项目的 `appsettings.json` 文件中添加一个名为 `RedisConnection` 的连接字符串,例如: ```json { "ConnectionStrings": { "RedisConnection": "localhost:6379" } } ``` 有了上面这些注册之后,我们就可以在需要使用 Redis 数据库的服务中注入 `IDatabase` 对象了,例如: ```csharp // MyService.cs using StackExchange.Redis; public class MyService { private readonly IDatabase _redisDatabase; public MyService(IDatabase redisDatabase) { _redisDatabase = redisDatabase; } public void SetData(string key, string value) { _redisDatabase.StringSet(key, value); } public string GetData(string key) { return _redisDatabase.StringGet(key); } } ``` 在上面的示例代码中,我们注入了 `IDatabase` 对象,并在 `SetData` 和 `GetData` 方法中使用该对象进行 Redis 数据库的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值