Azure Functions 是 Microsoft 提供的基于事件的无服务器计算平台,旨在加速和简化无服务器应用程序开发。它允许开发人员编写更少的代码,在没有额外设置的情况下本地构建和调试,并在云中大规模部署和操作。
Azure Functions 允许您将系统的逻辑实现到现成的代码块中。这些代码块称为“函数”。 Azure 函数的执行由事件触发 。每当执行需求增加时,就会自动向服务分配越来越多的资源,并且当请求下降时,所有额外的资源和应用程序实例会自动下降。简而言之,作为开发人员,您现在可以专注于对您最重要的代码部分,Azure Functions 会处理其余部分。
Azure Functions 根据需要提供尽可能多的或尽可能少的计算资源 来满足应用程序的需求。按需提供计算资源是 Azure Functions 中的无服务器计算 的本质。
在本教程中,您将学习如何开始使用 Azure Functions 和 Redis。
通过单击此链接创建具有活动订阅的 Azure 帐户: 免费创建帐户.
在搜索部分中键入“Azure Cache for Redis”,然后选择该服务
在“新建 Redis 缓存”窗口中,创建一个新的资源组,选择您首选的位置和缓存类型
您需要密钥才能登录 Redis 数据库。单击左侧边栏中的“概述”选项以查看主密钥并将其保存以备将来参考。
redis-cli -h demorediss.redis.cache.windows.net -p 6379
demorediss.redis.cache.windows.net:6379> info modules
NOAUTH Authentication required.
demorediss.redis.cache.windows.net:6379> auth jsn9IdFXXXXXXXXXXXXXsAzCaDzLh6s=
OK
demorediss.redis.cache.windows.net:6379> get a1
"100"
通过运行以下脚本安装 Homebrew 包管理器
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Visual Studio Code 是一款轻量级但功能强大的源代码编辑器,可在您的桌面上运行,可用于 Windows、macOS 和 Linux。它附带对 JavaScript、TypeScript 和 Node.js 的内置支持,并拥有丰富的扩展生态系统,可用于其他语言(如 C++、C#、Java、Python、PHP、Go)和运行时(如 .NET 和 Unity)。通过这些 入门视频 开始使用 VS Code 的旅程。
brew tap azure/functions
brew install azure-functions-core-tools@4
# if upgrading on a machine that has 2.x or 3.x installed:
brew link --overwrite azure-functions-core-tools@4
使用 Azure Functions 扩展可以快速创建、调试、管理和部署直接来自 VS Code 的无服务器应用程序。
在本教程中,我们将使用使用 C# 构建的婴儿姓名计数器应用程序。要开始,我们将首先克隆存储库
git clone https://github.com/redis-developer/Baby-Names-Func
local-settings.json
文件中添加“Azure Cache for Redis”端点 URL 详细信息,如下所示:{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
"redisCacheConnectionString": "demorediss.redis.cache.windows.net"
}
}
使用以下命令在 Visual Studio Code 中打开项目
cd Baby-Names-Func
code .
这将打开 VS Code。该函数将自动加载到插件中。
按 F5 自动执行函数。
您将在 VS Code 屏幕下找到以下输出
1>Done Building Project "/Users/ajeetraina/projects/Baby-Names-Func/RedisFunctions.csproj" (Clean target(s)).
Terminal will be reused by tasks, press any key to close it.
> Executing task: dotnet build /property:GenerateFullPaths=true /consoleloggerparameters:NoSummary <
Microsoft (R) Build Engine version 17.0.0+c9eb9dd64 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
RedisFunctions -> /Users/ajeetraina/projects/Baby-Names-Func/bin/Debug/net6.0/RedisFunctions.dll
Terminal will be reused by tasks, press any key to close it.
> Executing task: func host start <
Azure Functions Core Tools
Core Tools Version: 4.0.3971 Commit hash: d0775d487c93ebd49e9c1166d5c3c01f3c76eaaf (64-bit)
Function Runtime Version: 4.0.1.16815
[2022-03-01T07:51:01.383Z] Found /Users/ajeetraina/projects/Baby-Names-Func/RedisFunctions.csproj. Using for user secrets file configuration.
Functions:
CountBabyNames: [GET,POST] https://localhost:7071/api/getCount
IncrementBabyName: [GET,POST] https://localhost:7071/api/increment
For detailed output, run func with --verbose flag.
现在,让我们将 BabyNames 数据初始化到 Redis 数据库中。
git clone https://github.com/slorello89/Seed-Baby-Names
如果连接到 Redis 数据库并运行 MONITOR
命令,您应该会看到数据被插入到数据库中,如下所示
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Rowen" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Titus" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Braxton" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Alexander" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Finnegan" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Nasir" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Fabian" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Alexander" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Emilio" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Dax" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Johnny" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Mario" "1"
1646061655.966050 [0 122.171.48.244:60531] "SELECT" "0"
1646061655.966050 [0 122.171.48.244:60531] "CMS.INCRBY" "baby-names" "Lennox" "1"
在您的本地系统上设置 RedisInsight 并连接到 Redis 数据库。连接后,您应该能够运行以下查询
> CMS.INFO baby-names
1) width
2) (integer) 1000
3) depth
4) (integer) 10
5) count
6) (integer) 100000
> CMS.QUERY baby-names Johnny
1) 109