到 Azure Portal
建立我們的 Azure Redis Cache
以下是部署資訊
建立完之後,我們就可以去我們的 Redis 去取得連接字串。
最後我直接在 Azure Function 上面實作簡單的 Azure Redis Cache 例子,打這個 API 輸入的參數會被快取 15 秒,15秒內再打 API 值都不會被修改,15秒過後打API 值才會被修改。
首先要先在 Azure Function 加入 function.proj 然後填入下面的 xml 他就會開始安裝套件
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Redis" Version="2.1.2" />
</ItemGroup>
</Project>
接著開始寫 Redis Cache 的代碼
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using StackExchange.Redis;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
var connString = "{DNS名稱}.redis.cache.windows.net:6380,password=金鑰=,ssl=True,abortConnect=False"; //Redis連接字串
var redisConn = ConnectionMultiplexer.Connect(connString); //取得連線
var db = redisConn.GetDatabase(); //取得資料庫
var value = db.StringGet("name"); //從快取取值
if(string.IsNullOrEmpty(value))
{
db.StringSet("name", name, TimeSpan.FromSeconds(15)); //把值塞給快取
}
else
{
name = value;
}
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
結果