使用 ASP.NET Core 通过 Docker 探索 Redis 缓存 – 第一部分

作者 : 慕源网 本文共1977个字,预计阅读时间需要5分钟 发布时间: 2021-11-9 共512人阅读

回顾

在我之前的文章中,我们已经介绍了 Docker 和 Docker vs Container 的概念。

必备条件
  • 在本地机器上安装 Docker desktop
  • Visual Studio/ Visual Studio Code

介绍

Redis 缓存是一种内存数据结构存储,可用作数据库、消息代理和缓存。它支持散列、集合、列表、字符串、流等数据结构。它还包括其他功能,例如

  • 事务
  • 发布/订阅
  • 生存时间有限的钥匙
  • 自动故障转移

运行Redis容器

通过运行从 Docker 中心拉取最新的 Redis 版本:

docker pull redis

这里我们给它一个名字(local-redis)并暴露默认的redis端口- 6379

docker run -d -p 6379:6379 --name local-redis redis

检查它是否正在运行:

docker ps

并查看日志输出:

docker logs local-redis

在容器中运行 Redis CLI

我们将在正在运行的容器中启动一个新的交互式会话(-it),并使用它来运行 redis-cli。

docker exec -it local-redis sh

现在我们附加到我们的 redis 容器。让我们运行 redis-cli

# redis-cli

尝试一些基本命令

如果我们发送一个“ping”,我们应该得到一个“Pong”返回

127.0.0.1:6379> ping

PONG

尝试添加更多命令,例如设置键、增量和计数器

127.0.0.1:6379> set name Anika

OK

127.0.0.1:6379> get name

“Anika”

127.0.0.1:6379> incr counter

(integer) 1

127.0.0.1:6379> incr counter

(integer) 2

127.0.0.1:6379> get counter

“2”

当我们完成后退出 redis-cli 和 sh

127.0.0.1:6379> exit

# exit

开始编码

现在,Redis 在 docker 中成功运行。那么,让我们从代码的角度来理解Redis是如何工作的。

我为本文创建了一个 asp.net core web-api 项目。将 StackExchange.Redis nuget 包添加到项目中

让我们从 Startup 类开始

public void ConfigureServices(IServiceCollection services) {  
    services.AddControllers();  
    IConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");  
    services.AddScoped(x => redis.GetDatabase());  
}  

以上是连接Redis的代码。

在控制器中,我使用 key 属性从缓存中检索数据

[HttpGet("{key}")]  
public async Task < string > GetAsync(string key) {  
    return await _database.StringGetAsync(key);  
}  
在这两种 http post 方法中,我都使用 KeyValuePair<string,string>
[HttpPost]  
public async Task PostAsync([FromBody] KeyValuePair < string, string > keyValue) {  
    await _database.StringSetAsync(keyValue.Key, keyValue.Value);  
}  

上面的方法很简单,就是把KeyValuePair加入到Cache中。

[HttpPost(template: "expiry")]  
public async Task SaveExpiry([FromBody] KeyValuePair < string, string > keyValue) {  
    await _database.StringSetAsync(keyValue.Key, keyValue.Value, expiry: TimeSpan.FromSeconds(10));  
}  

除了将到期参数添加到 StringSetAsync 之外,SaveExpiry 方法的代码或多或少保持不变。我已经为到期参数设置了 10 秒的时间跨度。

注意
我不建议在 http post 动词中使用 expiry。相反,您可以在 WorkerService(即 BackGroundService)中实现它。我将使用相同的示例发布一篇关于 Azure Web 作业的文章。

最后,我们已设法将所有代码更改放在适当的位置。运行应用程序并验证结果。

似乎一切都按预期进行。

在文章的第 2 部分系列中,我将重点介绍在 docker 中运行当前应用程序以及容器(Redis 和我们的应用程序容器)之间的通信方式。

我希望你喜欢这篇文章。如果您觉得文章有趣,请点赞并分享。


慕源网 » 使用 ASP.NET Core 通过 Docker 探索 Redis 缓存 – 第一部分

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录