国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
1. 機(jī)能の概要
2. イベント タイプ
3. 設(shè)定
三、案例
代碼
新增和修改都是set指令
刪除
過期
ホームページ データベース Redis SpringBoot が Redis キー変更イベントを監(jiān)視する方法

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

May 26, 2023 pm 01:55 PM
redis springboot key

1. 機(jī)能の概要

キー スペース通知を使用すると、クライアントはチャネルまたはモードにサブスクライブすることで、何らかの方法で Redis キーを変更したイベントを受信できます。

キーを変更するすべてのコマンド。

LPUSH キー値 [値 …] コマンドを受け取るすべてのキー。

db データベース內(nèi)の期限切れのキー。

イベントは Redis のサブスクリプションおよび公開機(jī)能 (pub/sub) を通じて配布されるため、サブスクリプションおよび公開機(jī)能をサポートするすべてのクライアントは、変更を加えずにキーを直接使用できます。

Redis の現(xiàn)在のサブスクリプションおよびパブリッシュ機(jī)能はファイア アンド フォーゲット戦略を採用しているため、プログラムで信頼性の高いイベント通知が必要な場合、現(xiàn)在のキー スペース通知は適切ではない可能性があります。イベントにサブスクライブしたクライアントが停止したときオフラインでは、切斷中に配布されたすべてのイベントが失われます。

將來的には、より信頼性の高いイベント配信がサポートされる予定です。このサポートは、サブスクリプションおよびパブリッシング関數(shù)自體の信頼性を高めることによって、または Lua スクリプトでメッセージをサブスクライブおよびパブリッシュすることによって実現(xiàn)される可能性があります。パブリッシュして操作をリッスンするイベントをリストにプッシュするようなものです。

2. イベント タイプ

データベースを変更する操作ごとに、キースペース通知は 2 つの異なるタイプのイベントを送信します。

たとえば、データベース 0 のキー mykey に対して DEL key [key …] コマンドを?qū)g行すると、システムは2 つのメッセージ。これは、次の 2 つの PUBLISH チャネル メッセージ コマンドを?qū)g行するのと同じです。

PUBLISH __keyspace@0__:mykey del
PUBLISH __keyevent@0__:del mykey

最初のチャネルをサブスクライブします __keyspace@0__:mykey は、データベース內(nèi)のすべての変更されたキー mykey のイベントを受信できます いいえ. 0、2 番目のチャネルを購読すると、__keyevent@0__:del でデータベース 0 番の del コマンドを?qū)g行するすべてのキーを受け取ることができます。

キースペースで始まるチャネルはキースペース通知と呼ばれ、キーイベントで始まるチャネルはキーイベント通知と呼ばれます。

del mykey コマンドが実行されると:

  • キースペース チャネルのサブスクライバーは、実行されたイベントの名前 (この例では del ) を受け取ります。

  • キー イベント チャネルのサブスクライバーは、イベントが実行されたキーの名前 (この例では mykey ) を受け取ります。

3. 設(shè)定

キースペース通知機(jī)能をオンにするとCPUを必要とするため、デフォルト設(shè)定ではこの機(jī)能はオフになっています。

redis.conf ファイルを変更するか、CONFIG SET コマンドを直接使用して、キースペース通知機(jī)能をオンまたはオフにできます。

notify-keyspace-events オプションのパラメーターが空の文字列、機(jī)能はオフになります。

一方、パラメータが空文字列でない場合、この機(jī)能はオンになります。

notify-keyspace-events のパラメータには、サーバーが送信する通知の種類を指定する次の文字を任意に組み合わせできます:

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

Inputパラメータ 少なくとも 1 つの K または E が含まれている必要があります。そうでない場合、他のパラメータが何であっても、通知は配信されません。

たとえば、キースペース內(nèi)のリストに関連する通知のみをサブスクライブしたい場合は、パラメーターを Kl などに設(shè)定する必要があります。

パラメータを文字列に設(shè)定します。 "AKE" は、すべての種類の通知を送信することを意味します。

有効期限切れによりキーが削除されるたびに、expired 通知が生成されます。

maxmemory ポリシーによりメモリを再利用するためにキーが削除されるたびに、evicted 通知を生成します。

すべてのコマンドは、キーが実際に変更された後にのみ通知を生成します。

たとえば、

SREM キー メンバー [メンバー ...hellip;] がコレクション內(nèi)に存在しない要素を削除しようとすると、実際の変更が存在しないため、削除操作は失敗します。キーなので、この通知は操作に対して送信されません。

コマンドによって生成された通知について質(zhì)問がある場合は、次のコマンドを使用して自分で確認(rèn)することをお勧めします。

Redis は、次の 2 つの方法を使用して期限切れのキーを削除します。

キーにアクセスすると、プログラムはキーをチェックし、キーの有効期限が切れている場合、キーは削除されます。

基盤となるシステムは、期限切れになったがアクセスされないキーを処理するために、バックグラウンドで期限切れのキーを徐々に見つけて削除します。

上記 2 つのプログラムのいずれかによって期限切れのキーが検出され、そのキーがデータベースから削除されると、Redis は期限切れの通知を生成します。

Redis は、有効期間 (TTL) が 0 になったキーがすぐに削除されることを保証しません。プログラムがこの期限切れのキーにアクセスしない場合、または有効期間を持つキーが多すぎる場合、キーの有効期間は 0 になり、キーが実際に削除されるまでにかなりの時間がかかる場合があります。

因此, Redis 產(chǎn)生expired通知的時間為過期鍵被刪除的時候, 而不是鍵的生存時間變?yōu)?0 的時候。

三、案例

按上文內(nèi)容,我們先將redis的鍵空間通知開啟,我們開啟所有的通知,在可以端中測試后沒問題再到代碼中測試。

連接到redis 輸入一下命令

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

config set notify-keyspace-events KEA

訂閱鍵空間和鍵事件的主題

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

psubscribe '__key*__:*'#對所有庫鍵空間通知
 
psubscribe '__keyspace@2__:*' #是對db2數(shù)據(jù)庫鍵空間通知
 
psubscribe '__keyspace@2__:order*' #是對db2數(shù)據(jù)庫,key前綴為order所有鍵的鍵空間通知

創(chuàng)建一個 key :name valus:zhangsan

set name wsl

觀察訂閱的窗口 會受到兩個消息,第一個是:鍵空間 第二個是鍵事件,鍵空間是內(nèi)容是操作指令,主題中包含有key,鍵事件主題中包含了指令,內(nèi)容是key。

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

到這里說明已經(jīng)開啟了鍵空間通知

代碼

以下代碼采用string類型演示

在配置一下MessageListenerContainer類,將我們寫好的監(jiān)聽類添加到該類中即可,刪除和過期都是需要添加,我這里就一起添加了后面就不做演示。

@Configuration
public class RedisConfig {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Autowired
    private RedisUpdateAndAddListener redisUpdateAndAddListener;
 
    @Autowired
    private RedisDeleteListener redisDeleteListener;
 
    @Autowired
    private RedisExpiredListener redisExpiredListener;
 
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        //監(jiān)聽所有的key的set事件
        container.addMessageListener(redisUpdateAndAddListener, redisUpdateAndAddListener.getTopic());
        //監(jiān)聽所有key的刪除事件
        container.addMessageListener(redisDeleteListener,redisDeleteListener.getTopic());
        //監(jiān)聽所有key的過期事件
        container.addMessageListener(redisExpiredListener,redisExpiredListener.getTopic());
        return container;
    }
 
 
}

新增和修改都是set指令

所以監(jiān)聽的主題都一樣,實現(xiàn)MessageListener接口,重寫onMessage這里就是收到消息的處理邏輯

@Component
@Data
public class RedisUpdateAndAddListener implements MessageListener {
	//監(jiān)聽的主題
    private  final PatternTopic topic = new PatternTopic("__keyevent@*__:set");
 
    @Override
    public void onMessage(Message message,byte[] pattern){
        String topic = new String(pattern);
        String msg = new String(message.getBody());
        System.out.println("收到key更新或修改,消息主題是:"+ topic+",消息內(nèi)容是:"+msg);
    }
 
}

在redis中對name這個key進(jìn)行set操作

set name wsl

在控制臺就可以看到name這個key被操作了

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

刪除

跟上面的更新監(jiān)聽一樣,只需要把訂閱主題更改一下即可。同樣需要添加到這個RedisMessageListenerContainer,上面已經(jīng)添加,這里不做演示

@Component
@Data
public class RedisDeleteListener implements MessageListener {
 
    //監(jiān)聽主題
    private  final PatternTopic topic = new PatternTopic("__keyevent@*__:del");
 
    /**
     *
     * @param message 消息
     * @param pattern 主題
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String topic = new String(pattern);
        String msg = new String(message.getBody());
        System.out.println("收到key的刪除,消息主題是:"+ topic+",消息內(nèi)容是:"+msg);
    }
}

在redis輸入命令,del name 在控制臺可以看到已經(jīng)收到消息了。

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

過期

如上面的操作方式一樣

@Data
@Component
public class RedisExpiredListener implements MessageListener {
 
    //監(jiān)聽主題
    private  final PatternTopic topic = new PatternTopic("__keyevent@*__:expired");
 
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String topic = new String(pattern);
        String msg = new String(message.getBody());
        System.out.println("收到key的過期,消息主題是:"+ topic+",消息內(nèi)容是:"+msg);
    }
}

?在redis中寫一個定時刪除的keySETEX age 18 3三秒后就可以控制臺打印了相關(guān)信息

SpringBoot が Redis キー変更イベントを監(jiān)視する方法

以上がSpringBoot が Redis キー変更イベントを監(jiān)視する方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelの最高の拡張パックを推奨:2024 Essential Tools Laravelの最高の拡張パックを推奨:2024 Essential Tools Apr 30, 2025 pm 02:18 PM

2024年の必須のLaravel拡張パッケージには、次のものが含まれます。 2。LaravelteLescope、詳細(xì)なアプリケーション監(jiān)視を提供します。 3。RARAVELHORIZON、Redisキュータスクの管理。これらの拡張パックは、開発効率とアプリケーションのパフォーマンスを向上させることができます。

Laravel Environmentの構(gòu)築と基本構(gòu)成(Windows/Mac/Linux) Laravel Environmentの構(gòu)築と基本構(gòu)成(Windows/Mac/Linux) Apr 30, 2025 pm 02:27 PM

さまざまなオペレーティングシステムでLaravel環(huán)境を構(gòu)築する手順は次のとおりです。1。Windows:XAMPPを使用してPHPと作曲家をインストールし、環(huán)境変數(shù)を構(gòu)成し、Laravelをインストールします。 2.MAC:HomeBrewを使用してPHPとComposerをインストールし、Laravelをインストールします。 3.Linux:Ubuntuを使用してシステムを更新し、PHPとComposerをインストールし、Laravelをインストールします。各システムの特定のコマンドとパスは異なりますが、コアステップは、Laravel開発環(huán)境のスムーズな構(gòu)築を確保するために一貫しています。

Redis:従來のデータベースサーバーとの比較 Redis:従來のデータベースサーバーとの比較 May 07, 2025 am 12:09 AM

Redisは、並行性が高く、遅延の低いシナリオの従來のデータベースよりも優(yōu)れていますが、複雑なクエリやトランザクション処理には適していません。 1.Redisは、メモリストレージ、高速読み取り速度、および高い並行性と低遅延の要件に適しています。 2.従來のデータベースは、ディスクに基づいており、複雑なクエリとトランザクション処理をサポートし、データの一貫性と永続性が強(qiáng)い。 3. Redisは、従來のデータベースのサプリメントまたは代替品として適していますが、特定のビジネスニーズに応じて選択する必要があります。

Linuxのユーザーリソースを制限する方法は? ulimitを構(gòu)成する方法は? Linuxのユーザーリソースを制限する方法は? ulimitを構(gòu)成する方法は? May 29, 2025 pm 11:09 PM

Linuxシステムは、リソースの過度の使用を防ぐために、ULIMITコマンドを介してユーザーリソースを制限します。 1.ulimitは、ファイル記述子(-n)、メモリサイズ(-v)、スレッドカウント(-u)などの數(shù)を制限できるビルトインシェルコマンドであり、ソフト制限(現(xiàn)在の有効値)とハードリミット(最大上限)に分割されます。 2。Ulimit-N2048などの一時的な変更には、Ulimitコマンドを直接使用しますが、現(xiàn)在のセッションでのみ有効です。 3.永続的な効果を得るには、/etc/security/limits.confを変更し、PAM構(gòu)成ファイルを変更し、SessionRequiredPam_limits.soを追加する必要があります。 4. SystemDサービスは、ユニットファイルにLIMを設(shè)定する必要があります

Redisは主にデータベースですか? Redisは主にデータベースですか? May 05, 2025 am 12:07 AM

Redisは主にデータベースですが、単なるデータベース以上のものです。 1.データベースとして、Redisは持続性をサポートし、高性能のニーズに適しています。 2。キャッシュとして、Redisはアプリケーションの応答速度を改善します。 3。メッセージブローカーとして、Redisはリアルタイム通信に適したPublish-Subscribeモードをサポートしています。

Redis:SQLを超えて-NOSQLの視點 Redis:SQLを超えて-NOSQLの視點 May 08, 2025 am 12:25 AM

Redisは、高性能と柔軟性のためにSQLデータベースを超えています。 1)Redisは、メモリストレージを介して非常に速い読み取りおよび書き込み速度を?qū)g現(xiàn)します。 2)複雑なデータ処理に適したリストやコレクションなど、さまざまなデータ構(gòu)造をサポートしています。 3)シングルスレッドモデルは開発を簡素化しますが、高い並行性はボトルネックになる可能性があります。

PHPStudyを使用して動的なPHP Webサイトを構(gòu)築するための手順と例 PHPStudyを使用して動的なPHP Webサイトを構(gòu)築するための手順と例 May 16, 2025 pm 07:54 PM

PHPStudyを使用して動的なPHP Webサイトを構(gòu)築する手順には次のものがあります。1。PHPSTUDYをインストールし、サービスを開始します。 2。ウェブサイトのルートディレクトリとデータベース接続を構(gòu)成します。 3.動的コンテンツを生成するPHPスクリプトを書き込みます。 4.ウェブサイトのパフォーマンスをデバッグして最適化します。これらの手順を通じて、完全に機(jī)能的な動的PHP Webサイトをゼロから構(gòu)築できます。

Redis:その目的と主要なアプリケーションを発表します Redis:その目的と主要なアプリケーションを発表します May 03, 2025 am 12:11 AM

Redisisanopen-Source、In-MemoryDatastructurestoreStoreSadatabase、Cache、AndmessageBroker、ExcellingInspeedandversatility.ItisisWidely-susederCaching、Real-Timeanalytics、Session Management、AndleaderboardsdueTotutsuptorututrututrututruturturturturturturesturesaddataacys

See all articles