Oktatóanyag: Írási gyorsítótár létrehozása az Azure Functions és az Azure Cache for Redis használatával
Az oktatóanyag célja, hogy egy Azure Cache for Redis-példányt használjon írási gyorsítótárként. Az oktatóanyag írási mintája bemutatja, hogyan kell írni a gyorsítótár-eseményindítóba a megfelelő írásokat egy SQL-adatbázisba (az Azure SQL Database szolgáltatás egy példányára).
Ezt a funkciót az Azure Functions Redis-eseményindítója használatával valósíthatja meg. Ebben a forgatókönyvben megtudhatja, hogyan tárolhatja az Azure Cache for Redis készlet- és díjszabási adatait, miközben biztonsági másolatot készít ezekről az információkról egy SQL-adatbázisban.
A gyorsítótárba írt minden új elem vagy új ár megjelenik az adatbázis SQL-táblájában.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Adatbázis, eseményindító és kapcsolati sztring konfigurálása.
- Ellenőrizze, hogy az eseményindítók működnek-e.
- Kód üzembe helyezése függvényalkalmazásban.
Előfeltételek
- Azure-előfizetés. Ha nem rendelkezik Azure-előfizetéssel, hozzon létre egy ingyenes fiókot.
- Az előző oktatóanyag befejezése, az Azure Functions-eseményindítók használatának első lépései az Azure Cache for Redisben, az alábbi erőforrások kiépítésével:
- Azure Cache for Redis-példány
- Azure Functions-példány
- Az Azure SQL használatának munkatudása
- A Visual Studio Code (VS Code) környezete telepítve van a NuGet-csomagokkal
Új SQL-adatbázis létrehozása és konfigurálása
Ebben a példában az SQL-adatbázis a háttéradatbázis. SQL-adatbázist az Azure Portalon vagy az előnyben részesített automatizálási módszerrel hozhat létre.
Az SQL-adatbázisok létrehozásával kapcsolatos további információkért tekintse meg a rövid útmutatót: Egyetlen adatbázis létrehozása – Azure SQL Database.
Ez a példa a portált használja:
Adjon meg egy adatbázisnevet, és válassza az Új létrehozása lehetőséget egy új kiszolgáló létrehozásához az adatbázis tárolásához.
Válassza az SQL-hitelesítés használata lehetőséget, és adjon meg egy rendszergazdai bejelentkezést és jelszót. Ügyeljen arra, hogy emlékezzen ezekre a hitelesítő adatokra, vagy írja le őket. Amikor éles környezetben helyez üzembe egy kiszolgálót, használja helyette a Microsoft Entra-hitelesítést.
Lépjen a Hálózatkezelés lapra, és válassza a Nyilvános végpontot kapcsolati módszerként. Válassza az Igen lehetőséget mindkét megjelenő tűzfalszabály esetében. Ez a végpont engedélyezi a hozzáférést az Azure-függvényalkalmazásból.
Az ellenőrzés befejezése után válassza a Véleményezés + létrehozás , majd a Létrehozás lehetőséget. Az SQL-adatbázis üzembe helyezése elkezdődött.
Az üzembe helyezés befejezése után nyissa meg az erőforrást az Azure Portalon, és válassza a Lekérdezésszerkesztő lapot. Hozzon létre egy új, leltár nevű táblát, amely tartalmazza a hozzá írandó adatokat. A következő SQL-paranccsal hozzon létre egy új táblát két mezővel:
ItemName
felsorolja az egyes elemek nevét.Price
tárolja az elem árát.
CREATE TABLE inventory ( ItemName varchar(255), Price decimal(18,2) );
A parancs futtatása után bontsa ki a Táblák mappát, és ellenőrizze, hogy az új tábla létrejött-e.
A Redis-eseményindító konfigurálása
Először készítsen másolatot az előző oktatóanyagban használt VS Code-projektről. Másolja ki a mappát az előző oktatóanyagból egy új névvel( például RedisWriteBehindTrigger), és nyissa meg a VS Code-ban.
Másodszor törölje a RedisBindings.cs és RedisTriggers.cs fájlokat.
Ebben a példában a pub/al trigger használatával aktiválja az értesítéseket keyevent
. A példa céljai a következők:
- Esemény minden előfordulásának
SET
aktiválása. EseménySET
akkor fordul elő, ha a rendszer új kulcsokat ír a gyorsítótárpéldányba, vagy egy kulcs értéke megváltozik. - Az
SET
esemény aktiválása után lépjen a gyorsítótárpéldányhoz az új kulcs értékének megkereséséhez. - Állapítsa meg, hogy a kulcs már létezik-e az SQL-adatbázis leltártáblájában .
- Ha igen, frissítse a kulcs értékét.
- Ha nem, írjon egy új sort a kulccsal és az értékével.
Az eseményindító konfigurálása:
Importálja a
System.Data.SqlClient
NuGet-csomagot az SQL-adatbázissal való kommunikáció engedélyezéséhez. Lépjen a VS Code terminálra, és használja a következő parancsot:dotnet add package System.Data.SqlClient
Hozzon létre egy RedisFunction.cs nevű új fájlt. Győződjön meg arról, hogy törölte a RedisBindings.cs és RedisTriggers.cs fájlokat.
Másolja és illessze be a következő kódot a RedisFunction.cs a meglévő kód helyére:
using Microsoft.Extensions.Logging;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Redis;
using System.Data.SqlClient;
public class WriteBehindDemo
{
private readonly ILogger<WriteBehindDemo> logger;
public WriteBehindDemo(ILogger<WriteBehindDemo> logger)
{
this.logger = logger;
}
public string SQLAddress = System.Environment.GetEnvironmentVariable("SQLConnectionString");
//This example uses the PubSub trigger to listen to key events on the 'set' operation. A Redis Input binding is used to get the value of the key being set.
[Function("WriteBehind")]
public void WriteBehind(
[RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] Common.ChannelMessage channelMessage,
[RedisInput(Common.connectionString, "GET {Message}")] string setValue)
{
var key = channelMessage.Message; //The name of the key that was set
var value = 0.0;
//Check if the value is a number. If not, log an error and return.
if (double.TryParse(setValue, out double result))
{
value = result; //The value that was set. (i.e. the price.)
logger.LogInformation($"Key '{channelMessage.Message}' was set to value '{value}'");
}
else
{
logger.LogInformation($"Invalid input for key '{key}'. A number is expected.");
return;
}
// Define the name of the table you created and the column names.
String tableName = "dbo.inventory";
String column1Value = "ItemName";
String column2Value = "Price";
logger.LogInformation($" '{SQLAddress}'");
using (SqlConnection connection = new SqlConnection(SQLAddress))
{
connection.Open();
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
//Form the SQL query to update the database. In practice, you would want to use a parameterized query to prevent SQL injection attacks.
//An example query would be something like "UPDATE dbo.inventory SET Price = 1.75 WHERE ItemName = 'Apple'".
command.CommandText = "UPDATE " + tableName + " SET " + column2Value + " = " + value + " WHERE " + column1Value + " = '" + key + "'";
int rowsAffected = command.ExecuteNonQuery(); //The query execution returns the number of rows affected by the query. If the key doesn't exist, it will return 0.
if (rowsAffected == 0) //If key doesn't exist, add it to the database
{
//Form the SQL query to update the database. In practice, you would want to use a parameterized query to prevent SQL injection attacks.
//An example query would be something like "INSERT INTO dbo.inventory (ItemName, Price) VALUES ('Bread', '2.55')".
command.CommandText = "INSERT INTO " + tableName + " (" + column1Value + ", " + column2Value + ") VALUES ('" + key + "', '" + value + "')";
command.ExecuteNonQuery();
logger.LogInformation($"Item " + key + " has been added to the database with price " + value + "");
}
else {
logger.LogInformation($"Item " + key + " has been updated to price " + value + "");
}
}
connection.Close();
}
//Log the time that the function was executed.
logger.LogInformation($"C# Redis trigger function executed at: {DateTime.Now}");
}
}
Fontos
Ez a példa egyszerűbb az oktatóanyaghoz. Éles használat esetén javasoljuk, hogy paraméteres SQL-lekérdezésekkel előzze meg az SQL-injektálási támadásokat.
Kapcsolati sztringek konfigurálása
Frissítenie kell a local.settings.json fájlt, hogy tartalmazza az SQL-adatbázis kapcsolati sztring. Adjon hozzá egy bejegyzést a Values
következő szakaszhoz SQLConnectionString
: . A fájlnak ehhez a példához kell hasonlítania:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"redisConnectionString": "<redis-connection-string>",
"SQLConnectionString": "<sql-connection-string>"
}
}
A Redis kapcsolati sztring megkereséséhez nyissa meg az Azure Cache for Redis erőforrás erőforrás menüjét. Keresse meg a sztringet az Erőforrás menü Hozzáférési kulcsok területén.
Az SQL-adatbázis kapcsolati sztring megkereséséhez lépjen az SQL-adatbázis erőforrásának erőforrásmenüjéhez. A Beállítások területen válassza a Kapcsolati sztringek lehetőséget, majd válassza a ADO.NET lapot. A sztring a ADO.NET (SQL-hitelesítés) területen található.
Manuálisan kell megadnia az SQL-adatbázis jelszavát kapcsolati sztring, mert a jelszó nem lesz automatikusan beillesztve.
Fontos
Ez a példa egyszerűbb az oktatóanyaghoz. Éles használat esetén javasoljuk, hogy az Azure Key Vault használatával tárolja kapcsolati sztring információkat, vagy használja az Azure EntraID-t AZ SQL-hitelesítéshez.
A projekt buildelése és futtatása
A VS Code-ban lépjen a Futtatás és hibakeresés lapra , és futtassa a projektet.
Térjen vissza az Azure Cache for Redis-példányhoz az Azure Portalon, és a Konzol gombra kattintva lépjen be a Redis-konzolba. Próbálkozzon néhány
SET
parancs használatával:SET apple 5.25
SET bread 2.25
SET apple 4.50
A VS Code-ban az eseményindítók regisztrálása folyamatban van. Az eseményindítók működésének ellenőrzése:
Nyissa meg az SQL-adatbázist az Azure Portalon.
Az erőforrás menüjében válassza a Lekérdezésszerkesztő lehetőséget.
Új lekérdezés esetén hozzon létre egy lekérdezést a következő SQL-paranccsal a leltártábla 100 legfontosabb elemének megtekintéséhez:
SELECT TOP (100) * FROM [dbo].[inventory]
Győződjön meg arról, hogy az Azure Cache for Redis-példányba írt elemek itt jelennek meg.
A kód üzembe helyezése a függvényalkalmazásban
Ez az oktatóanyag az előző oktatóanyagra épül. További információ: Kód üzembe helyezése Egy Azure-függvényben.
A VS Code-ban lépjen az Azure lapra.
Keresse meg előfizetését, és bontsa ki. Ezután keresse meg a Függvényalkalmazás szakaszt, és bontsa ki azt.
Jelölje ki és tartsa lenyomva a függvényalkalmazást (vagy kattintson rá a jobb gombbal), majd válassza az Üzembe helyezés függvényalkalmazásban lehetőséget.
Kapcsolati sztring adatainak hozzáadása
Ez az oktatóanyag az előző oktatóanyagra épül. További információt a redisConnectionString
Kapcsolati sztring hozzáadása című témakörben talál.
Nyissa meg a függvényalkalmazást az Azure Portalon. Az erőforrás menüjében válassza a Környezeti változók lehetőséget.
Az Alkalmazásbeállítások panelen adja meg az SQLConnectionString nevet új mezőként. Az Érték mezőben adja meg a kapcsolati sztring.
Válassza az Alkalmazás lehetőséget.
Lépjen az Áttekintés panelre, és válassza az Újraindítás lehetőséget az alkalmazás újraindításához az új kapcsolati sztring adatokkal.
Az üzembe helyezés ellenőrzése
Az üzembe helyezés befejezése után térjen vissza az Azure Cache for Redis-példányhoz, és használjon SET
parancsokat további értékek írásához. Győződjön meg arról, hogy az SQL-adatbázisban is megjelennek.
Ha ellenőrizni szeretné, hogy a függvényalkalmazás megfelelően működik-e, nyissa meg az alkalmazást a portálon, és válassza a Naplóstream lehetőséget az erőforrás menüjében. Látnia kell az ott futó eseményindítókat és az SQL-adatbázis megfelelő frissítéseit.
Ha törlés nélkül szeretné törölni az SQL-adatbázistáblát, a következő SQL-lekérdezést használhatja:
TRUNCATE TABLE [dbo].[inventory]
Az erőforrások eltávolítása
Ha továbbra is használni szeretné a cikkben létrehozott erőforrásokat, tartsa meg az erőforráscsoportot.
Ellenkező esetben az erőforrásokhoz kapcsolódó díjak elkerülése érdekében, ha befejezte az erőforrások használatát, törölheti a létrehozott Azure-erőforráscsoportot.
Figyelmeztetés
Az erőforráscsoport törlése nem vonható vissza. Erőforráscsoport törlésekor az erőforráscsoport összes erőforrása véglegesen törlődik. Figyeljen arra, hogy ne töröljön véletlenül erőforráscsoportot vagy erőforrásokat. Ha olyan meglévő erőforráscsoportban hozta létre az erőforrásokat, amelyekben meg szeretné tartani az erőforrásokat, az erőforráscsoport törlése helyett egyenként törölheti az egyes erőforrásokat.
Erőforráscsoport törlése
Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.
Jelölje ki a törölni kívánt erőforráscsoportot.
Ha sok erőforráscsoport van, a Szűrő bármely mezőhöz mezőbe írja be a cikk végrehajtásához létrehozott erőforráscsoport nevét. A keresési eredmények listájában válassza ki az erőforráscsoportot.
Válassza az Erőforráscsoport törlése elemet.
Az Erőforráscsoport törlése panelen adja meg az erőforráscsoport nevét a megerősítéshez, majd válassza a Törlés lehetőséget.
Néhány percen belül az erőforráscsoport és annak összes erőforrása törlődik.
Összegzés
Ez az oktatóanyag és az Azure Functions-eseményindítók használatának első lépései az Azure Cache for Redisben bemutatják, hogyan lehet az Azure Cache for Redist használni az Azure-függvényalkalmazások aktiválásához. Azt is bemutatják, hogyan használhatja az Azure Cache for Redist írási mögöttes gyorsítótárként az Azure SQL Database-zel. Az Azure Cache for Redis használata az Azure Functions használatával hatékony kombináció, amely számos integrációs és teljesítményproblémát képes megoldani.