微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不等待的情况下在后台启动Redis连接

如何解决如何在不等待的情况下在后台启动Redis连接

我想将Redis连接作为后台任务启动,以便用户无需等待Redis连接建立。如果未设置Redis连接或Redis不可用,则应从源中获取数据,而不会影响用户

该应用程序是一个AWS Lambda Web API项目。我想避免单个请求中的连接延迟,但是我也不想通过在启动时等待连接来增加冷启动时间。

我正在使用StackExchange Redis客户端库。

为此,我想在后台任务中启动Redis连接。

解决方法

不需要额外的后台任务。 StackExchange.Redis库允许与ConnectionMultiplexer.ConnectAsync进行异步连接。所需要的是一种检查连接是否完整的方法,否则请使用其他来源。

一种方法是将数据访问包装在服务中,该服务在其构造函数中异步打开连接。它的方法可以检查连接是否打开,如果没有,则使用Redis或后备源(例如数据库)。

class MyFallbackService
{
    Task<ConnectionMultiplexer> _redisTask;

    public MyFallbackService(string redisConf,string conString)
    {
        _redisTask = ConnectionMultiplexer.ConnectAsync(redisConf);
        ...
    }

    public async Task<string> GetValue(string key)
    {
        if (_redisTask.IsCompleted)
        {
            var redis=_redisTask.Result;
            var db=redis.GetDatabase(...);
            var value= await db.StringGetAsync(key);
        }
        else
        {
            //Use the fallback source
        }
    }
}

可以在Startup.ConfigureServices中创建此服务并将其注册为Singleton实例。这样,连接过程将在启动时开始,但不会阻止启动过程:

services.AddSingleton(new MyFallbackService(...));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。