Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Redis, iletilerin Redis'e gönderilmesini ve abonelere yayımlanmasını sağlayan yayımlama/abone olma işlevlerine sahiptir.
Redis için Azure Cache tetikleyicileri ve bağlamaları hakkında daha fazla bilgi için Azure İşlevleri için Redis Uzantısı.
İşlev tetikleyicileri için kullanılabilirlik kapsamı
| Tetikleyici Türü | Azure Yönetilen Redis | Redis için Azure Önbelleği |
|---|---|---|
| Pub/Sub Tetikleyicisi | Evet | Evet |
Önemli
Azure Yönetilen Redis veya Redis için Azure Cache Kurumsal katmanlarını kullanırken 6380 veya 6379 numaralı bağlantı noktası yerine 10000 numaralı bağlantı noktasını kullanın.
Uyarı
Redis PubSub, istemcilerin her zaman tüm iletileri almak için etkin bir şekilde dinlemesini gerektirdiği için bu tetikleyici tüketim planında veya Esnek Tüketim planında desteklenmez. Tüketim planları için, işleviniz kanalda yayımlanan belirli iletileri kaçırabilir.
Önemli
İşlevler için Node.js v4 modeli henüz Redis için Azure Cache uzantısı tarafından desteklenmiyor. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.
Önemli
İşlevler için Python v2 modeli henüz Redis için Azure Cache uzantısı tarafından desteklenmiyor. v2 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Python geliştirici kılavuzuna bakın.
Örnekler
| Yürütme modeli | Açıklama |
|---|---|
| Yalıtılmış çalışan modeli | İşlev kodunuz ayrı bir .NET çalışan işleminde çalışır. Desteklenen .NET ve .NET Framework sürümleriyle kullanın. Daha fazla bilgi edinmek için bkz. Yalıtılmış çalışan modelinde C# Azure İşlevlerini çalıştırma kılavuzu. |
| İşlem içi model | İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. .NET'in yalnızca Uzun Süreli Destek (LTS) sürümlerini destekler. Daha fazla bilgi edinmek için bkz. Azure İşlevleri kullanarak C# sınıf kitaplığı işlevleri geliştirme. |
Önemli
.NET işlevleri için, işlem içi model üzerinde yalıtılmış çalışan modelinin kullanılması önerilir. İşlem içi ve yalıtılmış çalışan modellerinin karşılaştırması için bkz. yalıtılmış çalışan modeli ile Azure İşlevleri üzerinde .NET için işlem içi model arasındaki farklar.
Bu örnek kanalını pubsubTestdinler.
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);
}
}
}
Bu örnek, anahtarı keyspaceTestiçin tüm keyspace bildirimlerini dinler.
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);
}
}
}
Bu örnek, delete komutu keyeventiçin tüm DEL bildirimleri dinler.
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.");
}
}
}
Bu örnek kanalını pubsubTestdinler.
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);
}
}
Bu örnek, anahtarı myKeyiçin tüm keyspace bildirimlerini dinler.
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);
}
}
Bu örnek, delete komutu keyeventiçin tüm DEL bildirimleri dinler.
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);
}
}
Bu örnek, tetikleyicinin hangi kanalda gerçekleştiğini belirleyen dosyadaki index.js bağlama verileriyle aynı function.json dosyayı kullanır.
Dosya şu şekildedir index.js :
module.exports = async function (context, message) {
context.log(message);
}
Kimden function.json:
Kanalı dinlemek için verileri bağlama aşağıdadır pubsubTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Anahtar için keyspace bildirimlerini dinlemek için verileri bağlama aşağıdadır keyspaceTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Delete komutuna yönelik bildirimleri dinlemek keyevent için verileri bağlama aşağıdadır DEL.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Bu örnek, tetikleyicinin hangi kanalda gerçekleştiğini belirleyen dosyadaki run.ps1 bağlama verileriyle aynı function.json dosyayı kullanır.
Dosya şu şekildedir run.ps1 :
param($message, $TriggerMetadata)
Write-Host $message
Kimden function.json:
Kanalı dinlemek için verileri bağlama aşağıdadır pubsubTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Anahtar için keyspace bildirimlerini dinlemek için verileri bağlama aşağıdadır keyspaceTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Delete komutuna yönelik bildirimleri dinlemek keyevent için verileri bağlama aşağıdadır DEL.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Python v1 programlama modeli, işlev klasöründeki ayrı bir function.json dosyasında bağlamaları tanımlamanızı gerektirir. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.
Bu örnek, tetikleyicinin hangi kanalda gerçekleştiğini belirleyen dosyadaki __init__.py bağlama verileriyle aynı function.json dosyayı kullanır.
Dosya şu şekildedir __init__.py :
import logging
def main(message: str):
logging.info(message)
Kimden function.json:
Kanalı dinlemek için verileri bağlama aşağıdadır pubsubTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Anahtar için keyspace bildirimlerini dinlemek için verileri bağlama aşağıdadır keyspaceTest.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Delete komutuna yönelik bildirimleri dinlemek keyevent için verileri bağlama aşağıdadır DEL.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Özellikler
| Parametre | Açıklama | Zorunlu | Varsayılan |
|---|---|---|---|
Connection |
Önbellek bağlantı dizesi içeren uygulama ayarının adı, örneğin:<cacheName>.redis.cache.windows.net:6380,password... |
Evet | |
Channel |
Tetikleyicinin dinlemesi gereken pub alt kanalı. Glob stili kanal desenlerini destekler. Bu alan kullanılarak INameResolverçözümlenebilir. |
Evet |
Ek Açıklamalar
| Parametre | Açıklama | Zorunlu | Varsayılan |
|---|---|---|---|
name |
İşlev tarafından döndürülen değeri tutan değişkenin adı. | Evet | |
connection |
Önbellek bağlantı dizesi içeren uygulama ayarının adı, örneğin:<cacheName>.redis.cache.windows.net:6380,password... |
Evet | |
channel |
Tetikleyicinin dinlemesi gereken pub alt kanalı. Glob stili kanal desenlerini destekler. | Evet |
Yapılandırma
| function.json özelliği | Açıklama | Zorunlu | Varsayılan |
|---|---|---|---|
type |
Tetikleyici türü. Pub alt tetikleyicisi için türü şeklindedir redisPubSubTrigger. |
Evet | |
connection |
Önbellek bağlantı dizesi içeren uygulama ayarının adı, örneğin:<cacheName>.redis.cache.windows.net:6380,password... |
Evet | |
channel |
Abone olunan pub alt kanalının adı. | Evet | |
pattern |
Verilen kanalın desen eşleştirme kullandığını gösteren boole değeri. Doğruysapattern, kanal değişmez değer yerine glob stilinde bir desen olarak değerlendirilir. |
Evet | |
name |
İşlev tarafından döndürülen değeri tutan değişkenin adı. | Evet | |
direction |
olarak ayarlanmalıdır in. |
Evet |
Önemli
connection parametresi Redis önbelleğini bağlantı dizesi tutmaz. Bunun yerine, bağlantı dizesi tutan ortam değişkeninin adını gösterir. Bu, uygulamayı daha güvenli hale getirir. Daha fazla bilgi için bkz. Redis bağlantı dizesi.
Kullanım
Redis, iletilerin Redis'e gönderilmesini ve abonelere yayımlanmasını sağlayan yayımlama/abone olma işlevlerine sahiptir. Azure İşlevleri RedisPubSubTrigger pub/sub etkinliğinde tetiklenebilir. kullanarak RedisPubSubTriggerbelirli bir kanal desenine PSUBSCRIBEabone olur ve bu kanallarda alınan iletileri işleve gösterir.
Ön koşullar ve sınırlamalar
-
RedisPubSubTriggerkümelenmiş önbelleklerde keyspace bildirimlerini dinleme özelliğine sahip değildir. - Temel katman işlevleri, üzerinde
keyspacetetikleme veyakeyeventaracılığıylaRedisPubSubTriggerbildirim almayı desteklemez. -
RedisPubSubTriggerRedis PubSub, istemcilerin her zaman tüm iletileri almak için etkin bir şekilde dinlemesini gerektirdiğinden, Bu bir Tüketim planında veya Esnek Tüketim planında desteklenmez. Tüketim planları için, işleviniz kanalda yayımlanan belirli iletileri kaçırabilir. - ile işlevlerin
RedisPubSubTriggerölçeği birden çok örneğe genişletilmemelidir. Her örnek, her pub alt iletisini dinler ve işler ve yinelenen işlemeyle sonuçlanır.
Uyarı
Redis PubSub istemcilerin her zaman tüm iletileri almak için etkin bir şekilde dinlemesini gerektirdiği için bu tetikleyici Tüketim planında veya Esnek Tüketim planında desteklenmez. Tüketim planları için, işleviniz kanalda yayımlanan belirli iletileri kaçırabilir.
Anahtar alanı bildirimlerini tetikleme
Redis, keyspace notifications adlı yerleşik bir kavram sunar. Bu özellik etkinleştirildiğinde, çok çeşitli önbellek eylemlerinin bildirimlerini ayrılmış bir pub/alt kanalda yayımlar. Desteklenen eylemler, anahtar alanı bildirimleri olarak adlandırılan belirli anahtarları etkileyen eylemleri ve keyevent bildirimleri olarak adlandırılan belirli komutları içerir. , SETve DELgibi EXPIREçok çeşitli Redis eylemleri desteklenir. Listenin tamamı keyspace bildirim belgelerinde bulunabilir.
keyspace ve keyevent bildirimleri aşağıdaki söz dizimiyle yayımlanır:
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
Bu etkinlikler pub/sub kanallarında yayımlandığından RedisPubSubTrigger , bunları alabilir.
Daha fazla örnek için RedisPubSubTrigger bölümüne bakın.
Önemli
Redis için Azure Cache'da, keyspace bildirimler yayımlanmadan önce olayların etkinleştirilmesi gerekir. Daha fazla bilgi için bkz . Gelişmiş Ayarlar.
| Türü | Açıklama |
|---|---|
string |
Kanal iletisi, aşağıdaki biçimde JSON (bayt türleri için kodlanmış UTF-8) olarak seri hale getirilir. |
Custom |
Tetikleyici, kanaldaki iletiyi verilen özel türe eşlemek için Json.NET serileştirme kullanır. |
JSON dize biçimi
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}
| Türü | Açıklama |
|---|---|
string |
Kanal iletisi, aşağıdaki biçimde JSON (bayt türleri için kodlanmış UTF-8) olarak seri hale getirilir. |
Custom |
Tetikleyici, bir kanalındaki string iletiyi özel bir türe eşlemek için Json.NET serileştirme kullanır. |
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}