目次
はじめに
ケースの紹介
ホームページ データベース Redis Redis がセッション共有を実装する方法は何ですか?

Redis がセッション共有を実装する方法は何ですか?

May 30, 2023 pm 01:28 PM
redis session

はじめに

大昌の多くのプロジェクトは複数のサーバーにデプロイされています。これらのサーバーはさまざまな地域に存在します。サービスにアクセスすると、同じサービスが実行されているにもかかわらず、異なるサーバーで実行されている可能性があります。;

プロジェクトを検討しているときに、このようなログイン シナリオに遭遇しました。(図に示すように) 次の 3 つのサーバーがあると仮定し、セッションを使用してユーザーのログイン情報を保存します。この情報は、ユーザーのログイン情報を決定するために使用できます。ユーザーがログインしているかどうか:

Redis がセッション共有を実装する方法は何ですか?

このログインがサーバー 01 を介して実行されたと仮定すると、今回のログイン セッション情報はメモリ 01 に保存されますが、再度アクセスしたときは、 、サーバー02の操作で実行されますが、ログインセッション情報がメモリ01にあり、サーバー02はそれを取得できないため、ログインしていないと判断して間違った情報を返してしまいます...

私たちが達成したいのは、サーバーログインによって生成されたセッションは他のサーバーと共有できるということです。これを実現するにはどうすればよいでしょうか?

解決策 考え方は、これらのサーバーのメモリは共有できないため、これらのサーバーが一緒にアクセスできる共有スペースがある限り (図に示すように)、

Redis がセッション共有を実装する方法は何ですか?

最初に思い浮かぶのはデータベースです。これらのサーバー クラスターがデータベースを共有し、生成されたセッション情報をデータベースに保存している限り、誰もがデータベースにアクセスできます。 ; データベースにはリレーショナル データベースと非リレーショナル (NoSql) が含まれます:

  • リレーショナル データベース: Mysql など

  • 非リレーショナル データベース: Redis ( K /V データベース) など。

Redis はメモリに基づいており、読み取りおよび書き込みのパフォーマンスが高く、非常に優れているため、ここでは非リレーショナル データベースを選択するのが実際には最適です。ユーザー情報が頻繁に読み取られるこの状況に適しています。

ここでは紹介しませんが、ファイルサーバー経由での実装も可能です。

# 他にも実装可能な方法があります。 nginx の iphash を使用する この方法は非常に単純ですが、上の 2 つとは考え方が異なり、同じ IP に対するすべてのリクエストが nginx によって iphash 計算され、その結果が指定されたサーバーにバインドされます。その後、このリクエストはサーバーにアクセスします。
しかし、これにはいくつか問題があります。第一に、負荷分散はあまり意味がありません。バインドされたサーバーがハングアップすると、iphash は無効になります。あるいは、リクエストは nginx サービスではなく他のサービスによって分散されます。 . の場合、 iphash も有効になりません; したがって、注意して使用してください;

以下では、redis 構成を通じてセッション共有を簡単に実現する方法をコードを通じて簡単にシミュレートします

ケースの紹介

これは 1 つのユーザー管理プロジェクトです。ログインすると、ログイン ロジック コードがログイン ユーザーのセッション情報を記録します。

Redis がセッション共有を実装する方法は何ですか?

次に、プロジェクトの 2 つのサービス同時に開かれます: localhost:8080 と localhost:8082 (2 つの異なるサーバー上で実行されるプロジェクトとして使用できます)

Redis がセッション共有を実装する方法は何ですか?

サービスを開いた後、対応するインターフェイスドキュメント:

Redis がセッション共有を実装する方法は何ですか?

---------------------------- - - 分割線 - - - - - - - - - - - - - - - - - - - - - ##

Redis がセッション共有を実装する方法は何ですか?

# このサービスには次の 2 つのインターフェイスがあります: (次のテストは同じサービスでテストされます)

ログイン インターフェイス: ログイン ユーザー セッション情報を記録します

Redis がセッション共有を実装する方法は何ですか?

ログイン テスト:

Redis がセッション共有を実装する方法は何ですか?

#現在のユーザー情報インターフェイスの取得: ログイン セッションを通じて現在のユーザー情報を取得します

Redis がセッション共有を実装する方法は何ですか?

現在ログインしているユーザー情報の取得テスト:

Redis がセッション共有を実装する方法は何ですか?

#これらは現在 2 つのサービスであるため、共有することはできません。現在のユーザー情報を取得します (もう一度強調しますが、上記のテストは同じ環境でテストされているため、現在のユーザー情報を取得できます)。サービス。同じサービス セッションは独自のメモリに保存され、もちろん単独でアクセスできます)

特定の操作

次は、redis 構成を通じて共有セッションを実装する方法です:

まず、redis をダウンロードし、オンラインでチュートリアルを見つけます。ここでは、サーバー上の docker によって作成された Redis コンテナーを直接使用します (シンプルで使いやすく、強くお勧めします):

Redis がセッション共有を実装する方法は何ですか?

# #ビジュアル ツールを使用して接続できます:

Redis がセッション共有を実装する方法は何ですか?

このようにして、redis が構成されました。次に、プロジェクト コードで redis を構成します:

Introducing redis dependency intoプロジェクトは spring-session 構成に依存します (セッションが redis に自動的に保存されます):

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<version>2.6.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
	<version>2.6.3</version>
</dependency>
ログイン後にコピー

application.yml ファイルで接続 redis とセッション関連の構成を構成します:

spring:
  # session配置
  session:
    timeout: 86400 # 设置session失效时间
    store-type: redis # 修改spring-session存储配置,默认存储到服务器内存中,现在设置存到redis中(关键)
  # redis配置
  redis:
    port: 8081 # redis的端口号(这里是我的redis容器在docker中对应的端口号)
    host: xx.xxx.xxx.xxx # 我的云服务器ip
    database: 0 # 设置存入redis的哪一个库(默认是0)
ログイン後にコピー

実際には、キー構成は 1 つだけです:store-type: redis。これが構成されている限り、コード内のセッションは独自のメモリではなく redis に保存されます。

その後、テストできます:

ログイン インターフェイスを呼び出し、ユーザー セッション情報を生成し、redis を確認します。

Redis がセッション共有を実装する方法は何ですか?

#ユーザー ログイン セッションが redis に保存されていることがわかります。ポート 8080 でログインし、8082 で取得することもできます。 ログイン セッション情報:

ログイン:

Redis がセッション共有を実装する方法は何ですか?

情報の取得:

Redis がセッション共有を実装する方法は何ですか?#このようにして、redis を通じてセッション共有を実現します。

注: 導入された redis と spring-redis の依存関係のバージョンは近い必要があります。

以上がRedis がセッション共有を実装する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11 10.0.22000.100 のインストール時の 0x80242008 エラーの解決策 Windows 11 10.0.22000.100 のインストール時の 0x80242008 エラーの解決策 May 08, 2024 pm 03:50 PM

1. [スタート]メニューを起動し、[cmd]と入力し、[コマンドプロンプト]を右クリックし、[管理者として実行]を選択します。 2. 次のコマンドを順番に入力します (注意してコピーして貼り付けてください): SCconfigwuauservstart=auto、Enter キーを押す SCconfigbitsstart=auto、Enter キーを押す SCconfigcryptsvcstart=auto、Enter キーを押す SCconfigtrustedinstallerstart=auto、Enter キーを押す SCconfigwuauservtype=share、Enter キーを押す netstopwuauserv 、enter netstopcryptS を押す

Golang API のキャッシュ戦略と最適化 Golang API のキャッシュ戦略と最適化 May 07, 2024 pm 02:12 PM

GolangAPI のキャッシュ戦略により、パフォーマンスが向上し、サーバーの負荷が軽減されます。一般的に使用される戦略は、LRU、LFU、FIFO、TTL です。最適化手法には、適切なキャッシュ ストレージの選択、階層型キャッシュ、無効化管理、監視とチューニングが含まれます。実際には、データベースからユーザー情報を取得する API を最適化するために LRU キャッシュが使用されます。それ以外の場合は、データベースからデータを取得した後にキャッシュを更新できます。

PHP 開発におけるキャッシュ メカニズムとアプリケーションの実践 PHP 開発におけるキャッシュ メカニズムとアプリケーションの実践 May 09, 2024 pm 01:30 PM

PHP 開発では、キャッシュ メカニズムにより、頻繁にアクセスされるデータがメモリまたはディスクに一時的に保存され、データベース アクセスの数が削減され、パフォーマンスが向上します。キャッシュの種類には主にメモリ、ファイル、データベース キャッシュが含まれます。キャッシュは、組み込み関数またはサードパーティのライブラリ (cache_get() や Memcache など) を使用して PHP に実装できます。一般的な実用的なアプリケーションには、データベース クエリ結果をキャッシュしてクエリ パフォーマンスを最適化したり、ページ出力をキャッシュしてレンダリングを高速化したりすることが含まれます。キャッシュ メカニズムにより、Web サイトの応答速度が効果的に向上し、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。

Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法_Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法 Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法_Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法 May 08, 2024 pm 05:10 PM

まず、システム言語を簡体字中国語表示に設定して再起動する必要があります。もちろん、以前に表示言語を簡体字中国語に変更したことがある場合は、この手順をスキップできます。次に、レジストリ regedit.exe の操作を開始し、左側のナビゲーション バーまたは上部のアドレス バーで HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage に直接移動し、InstallLanguage キーの値と Default キーの値を 0804 に変更します (英語に変更する場合)。まずシステムの表示言語を en-us に設定し、システムを再起動してから、すべてを 0409 に変更します) この時点でシステムを再起動する必要があります。

PHP 配列のページネーションで Redis キャッシュを使用するにはどうすればよいですか? PHP 配列のページネーションで Redis キャッシュを使用するにはどうすればよいですか? May 01, 2024 am 10:48 AM

Redis キャッシュを使用すると、PHP 配列ページングのパフォーマンスを大幅に最適化できます。これは、次の手順で実現できます。 Redis クライアントをインストールします。 Redisサーバーに接続します。キャッシュ データを作成し、データの各ページをキー「page:{page_number}」を持つ Redis ハッシュに保存します。キャッシュからデータを取得し、大規模な配列での高コストの操作を回避します。

Win11でダウンロードしたアップデートファイルの探し方_Win11でダウンロードしたアップデートファイルの場所を共有する Win11でダウンロードしたアップデートファイルの探し方_Win11でダウンロードしたアップデートファイルの場所を共有する May 08, 2024 am 10:34 AM

1. まず、デスクトップ上の[このPC]アイコンをダブルクリックして開きます。 2. 次に、マウスの左ボタンをダブルクリックして [C ドライブ] に入ります。システム ファイルは通常、自動的に C ドライブに保存されます。 3. 次に、C ドライブで [windows] フォルダーを見つけ、ダブルクリックしてに入ります。 4. [windows]フォルダーに入ったら、[SoftwareDistribution]フォルダーを見つけます。 5. 入力後、win11 のダウンロード ファイルとアップデート ファイルがすべて含まれている [ダウンロード] フォルダーを見つけます。 6. これらのファイルを削除したい場合は、このフォルダー内で直接削除してください。

PHP Redis キャッシュ アプリケーションとベスト プラクティス PHP Redis キャッシュ アプリケーションとベスト プラクティス May 04, 2024 am 08:33 AM

Redis は、高性能のキー/値キャッシュです。 PHPRedis 拡張機能は、Redis サーバーと対話するための API を提供します。 Redis に接続し、データを保存および取得するには、次の手順を使用します。 接続: Redis クラスを使用してサーバーに接続します。ストレージ: set メソッドを使用してキーと値のペアを設定します。取得: get メソッドを使用してキーの値を取得します。

Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Apr 01, 2025 pm 03:06 PM

エラーの原因とソリューションPECLを使用してDocker環境に拡張機能をインストールする場合、Docker環境を使用するときに、いくつかの頭痛に遭遇します...

See all articles