使用 asp.net core 使用 Docker 探索 Redis 缓存 – 第 1 部分

作者 : 慕源网 本文共1990个字,预计阅读时间需要5分钟 发布时间: 2022-01-24 共463人阅读

回顾

在我之前的文章中,我们已经了解了 Docker 和 Docker vs Container 的概念。如果您还没有阅读,我鼓励您从这里阅读。

前提条件

  • 安装在本地机器上的 Docker desktop 
  • Visual Studio/ Visual Studio Code

介绍

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

  • Transactions
  • 发布/订阅
  • 生命周期的秘钥
  • 自动故障转移

运行 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 添加到缓存中。

[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 缓存 – 第 1 部分

常见问题FAQ

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

发表评论

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