Azure Functions 是由 Microsoft 提供的基于事件的无服务器计算平台,旨在加速和简化无服务器应用程序开发。它允许开发者编写更少的代码,无需额外设置即可在本地构建和调试,并在云中大规模部署和运行。
Azure Functions 允许您将系统逻辑实现到现成的代码块中。这些代码块称为“函数”。Azure 函数的执行由事件触发。当执行需求增加时,会自动分配越来越多的资源给该服务,当请求减少时,所有额外的资源和应用程序实例都会自动释放。简而言之,作为开发者,您现在可以专注于对您最重要的代码片段,而 Azure Functions 会处理其余部分。
Azure Functions 根据应用程序的需求提供所需数量的计算资源。按需提供计算资源是 Azure Functions 无服务器计算的精髓。
在本教程中,您将学习如何开始使用 Azure Functions 和 Redis。
点击此链接创建具有活动订阅的 Azure 账户:免费创建账户。
在搜索栏中输入“Azure Cache for Redis”并选择该服务。
在“新建 Redis Cache”窗口下,创建一个新的资源组,选择您偏好的位置和缓存类型。
您需要密钥才能登录 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] http://localhost:7071/api/getCount
IncrementBabyName: [GET,POST] http://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