如何解决如何在不等待的情况下在后台启动Redis连接
我想将Redis连接作为后台任务启动,以便用户无需等待Redis连接建立。如果未设置Redis连接或Redis不可用,则应从源中获取数据,而不会影响用户。
该应用程序是一个AWS Lambda Web API项目。我想避免单个请求中的连接延迟,但是我也不想通过在启动时等待连接来增加冷启动时间。
我正在使用StackExchange 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 举报,一经查实,本站将立刻删除。