如何在后台启动redis连接而不等待

sf6xfgos  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(504)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

两个月前关门了。
改进这个问题
我想启动redis连接作为后台任务,这样用户就不需要等待redis连接建立。如果没有建立redis连接或redis不可用,则应从源获取数据,而不影响用户。
该应用程序是一个aws lambda web api项目。我想避免个别请求中的连接延迟,但我也不想通过在启动时等待连接来增加冷启动时间。
我正在使用StackExchangeRedis客户端库。
为了完成这个任务,我想在后台启动redis连接任务。

7z5jn7bk

7z5jn7bk1#

不需要额外的背景任务。stackexchange.redis库允许异步连接 ConnectionMultiplexer.ConnectAsync . 我们需要的是一种检查连接是否完整的方法,如果不完整,请使用另一个源。
一种方法是在服务中 Package 数据访问,该服务在其构造函数中异步打开连接。它的方法可以检查连接是否打开,如果没有,则使用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 . 这样,连接过程将在启动时开始,但不会阻止启动过程:

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

相关问题