Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Fitur Redis menerbitkan/berlangganan fungsionalitas yang memungkinkan pesan dikirim ke Redis dan disiarkan kepada pelanggan.
Untuk informasi selengkapnya tentang pemicu dan pengikatan Azure Cache for Redis, Ekstensi Redis untuk Azure Functions.
Cakupan ketersediaan untuk pemicu fungsi
| Jenis Pemicu | Azure Managed Redis | Azure Cache for Redis |
|---|---|---|
| Pemicu Pub/Sub | Ya | Ya |
Penting
Saat menggunakan Azure Managed Redis atau tingkat Enterprise Azure Cache for Redis, gunakan port 10000 daripada port 6380 atau 6379.
Peringatan
Pemicu ini tidak didukung pada paket Konsumsi atau paket Konsumsi Flex karena Redis PubSub mengharuskan klien untuk selalu aktif mendengarkan untuk menerima semua pesan. Untuk paket konsumsi, fungsi Anda mungkin melewatkan pesan tertentu yang diterbitkan ke saluran.
Penting
Model Python v2 untuk Functions belum didukung oleh ekstensi Azure Cache for Redis. Untuk detail selengkapnya tentang cara kerja model v2, lihat panduan pengembang Azure Functions Python.
Contoh
| Model eksekusi | Deskripsi |
|---|---|
| Model pekerja terisolasi | Kode fungsi Anda berjalan dalam proses pekerja .NET terpisah. Gunakan dengan versi .NET dan .NET Framework yang didukung. Untuk mempelajari selengkapnya, lihat Panduan untuk menjalankan C# Azure Functions dalam model pekerja yang terisolasi. |
| Model dalam proses | Kode fungsi Anda berjalan dalam proses yang sama dengan proses host Azure Functions. Hanya mendukung versi Dukungan Jangka Panjang (LTS) .NET. Untuk mempelajari lebih lanjut, lihat Mengembangkan fungsi pustaka kelas C# dengan menggunakan Azure Functions. |
Penting
Untuk fungsi .NET, menggunakan model pekerja terisolasi direkomendasikan melalui model dalam proses . Untuk perbandingan model pekerja dalam proses dan terisolasi, lihat perbedaan antara model pekerja yang terisolasi dan model dalam proses untuk .NET di Azure Functions.
Sampel ini mendengarkan saluran pubsubTest.
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
internal class SimplePubSubTrigger
{
private readonly ILogger<SimplePubSubTrigger> logger;
public SimplePubSubTrigger(ILogger<SimplePubSubTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(SimplePubSubTrigger))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "pubsubTest")] string message)
{
logger.LogInformation(message);
}
}
}
Sampel ini mendengarkan pemberitahuan keyspace apa pun untuk kunci keyspaceTest.
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
internal class KeyspaceTrigger
{
private readonly ILogger<KeyspaceTrigger> logger;
public KeyspaceTrigger(ILogger<KeyspaceTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(KeyspaceTrigger))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyspace@0__:keyspaceTest")] string message)
{
logger.LogInformation(message);
}
}
}
Sampel ini mendengarkan pemberitahuan apa pun keyevent untuk perintah DELhapus .
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
internal class KeyeventTrigger
{
private readonly ILogger<KeyeventTrigger> logger;
public KeyeventTrigger(ILogger<KeyeventTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(KeyeventTrigger))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:del")] string message)
{
logger.LogInformation($"Key '{message}' deleted.");
}
}
}
Sampel ini mendengarkan saluran pubsubTest.
package com.function.RedisPubSubTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class SimplePubSubTrigger {
@FunctionName("SimplePubSubTrigger")
public void run(
@RedisPubSubTrigger(
name = "req",
connection = "redisConnectionString",
channel = "pubsubTest",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Sampel ini mendengarkan pemberitahuan keyspace apa pun untuk kunci myKey.
package com.function.RedisPubSubTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class KeyspaceTrigger {
@FunctionName("KeyspaceTrigger")
public void run(
@RedisPubSubTrigger(
name = "req",
connection = "redisConnectionString",
channel = "__keyspace@0__:keyspaceTest",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Sampel ini mendengarkan pemberitahuan apa pun keyevent untuk perintah DELhapus .
package com.function.RedisPubSubTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class KeyeventTrigger {
@FunctionName("KeyeventTrigger")
public void run(
@RedisPubSubTrigger(
name = "req",
connection = "redisConnectionString",
channel = "__keyevent@0__:del",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Sampel ini menggunakan file yang sama index.js , dengan mengikat data dalam function.json file yang menentukan saluran mana pemicu terjadi.
Berikut adalah filenya index.js :
module.exports = async function (context, message) {
context.log(message);
}
Dari function.json:
Berikut adalah data pengikatan untuk mendengarkan saluran pubsubTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Berikut adalah data pengikatan untuk mendengarkan pemberitahuan keyspace untuk kunci keyspaceTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Berikut adalah data pengikatan untuk mendengarkan keyevent pemberitahuan untuk perintah DELhapus .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Sampel ini menggunakan file yang sama run.ps1 , dengan mengikat data dalam function.json file yang menentukan saluran mana pemicu terjadi.
Berikut adalah filenya run.ps1 :
param($message, $TriggerMetadata)
Write-Host $message
Dari function.json:
Berikut adalah data pengikatan untuk mendengarkan saluran pubsubTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Berikut adalah data pengikatan untuk mendengarkan pemberitahuan keyspace untuk kunci keyspaceTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Berikut adalah data pengikatan untuk mendengarkan keyevent pemberitahuan untuk perintah DELhapus .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Model pemrograman Python v1 mengharuskan Anda menentukan pengikatan dalam file function.json terpisah di folder fungsi. Untuk informasi selengkapnya, lihat panduan pengembang Python.
Sampel ini menggunakan file yang sama __init__.py , dengan mengikat data dalam function.json file yang menentukan saluran mana pemicu terjadi.
Berikut adalah filenya __init__.py :
import logging
def main(message: str):
logging.info(message)
Dari function.json:
Berikut adalah data pengikatan untuk mendengarkan saluran pubsubTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Berikut adalah data pengikatan untuk mendengarkan pemberitahuan keyspace untuk kunci keyspaceTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Berikut adalah data pengikatan untuk mendengarkan keyevent pemberitahuan untuk perintah DELhapus .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Atribut
| Pengaturan | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
Connection |
Nama pengaturan aplikasi yang berisi string koneksi cache, seperti:<cacheName>.redis.cache.windows.net:6380,password... |
Ya | |
Channel |
Sub saluran pub yang harus didengarkan pemicunya. Mendukung pola saluran gaya glob. Bidang ini dapat diselesaikan menggunakan INameResolver. |
Ya |
Anotasi
| Pengaturan | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
name |
Nama variabel yang menyimpan nilai yang dikembalikan oleh fungsi . | Ya | |
connection |
Nama pengaturan aplikasi yang berisi string koneksi cache, seperti:<cacheName>.redis.cache.windows.net:6380,password... |
Ya | |
channel |
Sub saluran pub yang harus didengarkan pemicunya. Mendukung pola saluran gaya glob. | Ya |
Konfigurasi
| Properti function.json | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
type |
Jenis pemicu. Untuk sub pemicu pub, jenisnya adalah redisPubSubTrigger. |
Ya | |
connection |
Nama pengaturan aplikasi yang berisi string koneksi cache, seperti:<cacheName>.redis.cache.windows.net:6380,password... |
Ya | |
channel |
Nama sub saluran pub yang sedang berlangganan. | Ya | |
pattern |
Boolean untuk menunjukkan saluran yang diberikan menggunakan pencocokan pola. Jika pattern benar, maka saluran diperlakukan seperti pola gaya glob alih-alih sebagai harfiah. |
Ya | |
name |
Nama variabel yang menyimpan nilai yang dikembalikan oleh fungsi . | Ya | |
direction |
Harus diatur ke in. |
Ya |
Penting
Parameter connection tidak menahan cache Redis string koneksi itu sendiri. Sebaliknya, menunjuk ke nama variabel lingkungan yang menyimpan string koneksi. Ini membuat aplikasi lebih aman. Untuk informasi selengkapnya, lihat Redis string koneksi.
Penggunaan
Fitur Redis menerbitkan/berlangganan fungsionalitas yang memungkinkan pesan dikirim ke Redis dan disiarkan kepada pelanggan. memungkinkan RedisPubSubTrigger Azure Functions dipicu pada aktivitas pub/sub.
RedisPubSubTriggerBerlangganan pola saluran tertentu menggunakan PSUBSCRIBE, dan menampilkan pesan yang diterima pada saluran tersebut ke fungsi .
Prasyarat dan batasan
-
RedisPubSubTriggertidak mampu mendengarkan pemberitahuan keyspace pada cache berkluster. - Fungsi tingkat dasar tidak mendukung pemicu pada
keyspaceataukeyeventpemberitahuan melaluiRedisPubSubTrigger. -
RedisPubSubTriggertidak didukung pada paket Konsumsi atau paket Konsumsi Flex karena Redis PubSub mengharuskan klien untuk selalu aktif mendengarkan untuk menerima semua pesan. Untuk paket konsumsi, fungsi Anda mungkin melewatkan pesan tertentu yang diterbitkan ke saluran. - Fungsi dengan
RedisPubSubTriggertidak boleh diskalakan ke beberapa instans. Setiap instans mendengarkan dan memproses setiap sub pesan pub, menghasilkan pemrosesan duplikat.
Peringatan
Pemicu ini tidak didukung pada paket Konsumsi atau paket Konsumsi Flex karena Redis PubSub mengharuskan klien untuk selalu aktif mendengarkan untuk menerima semua pesan. Untuk paket konsumsi, fungsi Anda mungkin melewatkan pesan tertentu yang diterbitkan ke saluran.
Memicu pemberitahuan keyspace
Redis menawarkan konsep bawaan yang disebut pemberitahuan keyspace. Saat diaktifkan, fitur ini menerbitkan pemberitahuan berbagai tindakan cache ke saluran pub/sub khusus. Tindakan yang didukung mencakup tindakan yang memengaruhi kunci tertentu, yang disebut pemberitahuan keyspace, dan perintah tertentu, yang disebut pemberitahuan keyevent. Berbagai tindakan Redis didukung, seperti SET, , DELdan EXPIRE. Daftar lengkap dapat ditemukan dalam dokumentasi pemberitahuan keyspace.
Pemberitahuan keyspace dan keyevent diterbitkan dengan sintaks berikut:
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
Karena peristiwa ini dipublikasikan di pub/sub saluran, RedisPubSubTrigger mampu mengambilnya. Lihat bagian RedisPubSubTrigger untuk contoh selengkapnya.
Penting
Di Azure Cache for Redis, keyspace peristiwa harus diaktifkan sebelum pemberitahuan diterbitkan. Untuk informasi selengkapnya, lihat Pengaturan Tingkat Lanjut.
| Tipe | Deskripsi |
|---|---|
string |
Pesan saluran yang diserialisasikan sebagai JSON (UTF-8 dikodekan untuk jenis byte) dalam format berikut. |
Custom |
Pemicu menggunakan serialisasi Json.NET untuk memetakan pesan dari saluran ke dalam jenis kustom yang diberikan. |
Format string JSON
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}
| Tipe | Deskripsi |
|---|---|
string |
Pesan saluran yang diserialisasikan sebagai JSON (UTF-8 dikodekan untuk jenis byte) dalam format berikut. |
Custom |
Pemicu menggunakan serialisasi Json.NET untuk memetakan pesan dari saluran dari string ke dalam jenis kustom. |
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}