問題タブ [spring-data-redis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - Spring-data-redis 接続プールが期待どおりに機能しない
これは spring-data-redis を使用した最初のアプリケーションであり、概念をかなりよく理解していると思います (過去に RDBMS-es で JdbcTemplate を何度も使用しました)。ここで何が起こっている...
私が直面している問題は、(ValueOperations オブジェクトを使用して) get(key) 操作を行うたびに、接続が開閉され、約 1/10 秒の遅延が発生することです (これはサーバー コードなので、1/10セカンドは充実しています)。春の XML 構成は次のとおりです。
関連するJavaコードは次のとおりです。
したがって、同じキーの値が 6 回取得されます。表示されるログ出力は次のとおりです。
接続プールの設定方法に関するドキュメントに従ったと思っていましたが、Redis などのパフォーマンス指向のプラットフォームを扱う場合、私が見ているこの遅延は予想できませんでした。
支援やヒントをお寄せいただきありがとうございます。
redis - Spring Cloud、Spring Data Redis、および Eureka の本番環境に関する考慮事項
セキュリティ ゲートウェイ、2 つの UI サーバー、REST API サーバーの 4 つのサーバー タイプにまたがる Spring Cloud マイクロ サービス アプリケーションがあります。これらはそれぞれ、実稼働環境の独自の VM で実行されます。REST サーバーの 4 つのサーバー インスタンスと、他の各サーバーの 2 つのインスタンスです。
このシステムは、約 30,000 人のユーザーにサービスを提供する予定です。
サービス検出は Eureka によって提供されます。フェイルオーバー用に 2 つの Eureka サーバーがあります。
共有 HTTP セッションは、参加サーバーで @EnableRedisHttpSession アノテーションを使用して、Spring Session および Spring Data Redis によって提供されます。
Redis 用に 3 つの VM をセットアップすることにしました (「例 2: 3 つのボックスを使用した基本的なセットアップ」の URL: http://redis.io/topics/sentinel )。
各 VM は Redis サーバーと Redis Sentinel プロセスを実行します (Redis サーバーの 1 つがマスターになり、2 つのインスタンスがスレーブになります)。
これはすべて、開発マシンとシステム テスト マシンでうまく機能し、ほとんどの場合、すべてのプロセスが同じサーバーで実行されます。
私は現在、複数の VM を使用して、本番環境に似た環境でパフォーマンス テストを実行する方向に進んでいます。本番環境で同様の Spring Cloud セットアップを既に行っている開発者からのフィードバックと推奨事項をいくつかお願いします。
- どのようなエッジ ケースを探す必要がありますか?
- 推奨される構成設定はありますか? 私のセットアップを以下に示します。
- テスト環境では問題なく動作するが、本番環境では深刻な問題になる構成設定はありますか?
- 私の特定のシナリオでは、セッション情報を保存するためだけに存在するため、Redis から古いデータを消去するソリューションも必要です。何らかの理由でセッションの有効期限が切れたときにスプリングがセッション データをクリーンアップしない場合 (たとえば、サーバーが突然強制終了された場合)、本当に古いデータをクリーンアップしたいと思います。Redis の LRU/キャッシング メカニズムについて読みましたが、データ サイズが一定に達した場合にのみ、時間に関して何らかの保証がないようです。
これが私のマスター Redis サーバーの構成です。スレーブはほとんど同じですが、ポートが異なり、マスターのスレーブであることを示しています。
Redis センチネルの構成は次のとおりです。
Eureka サーバーの application.yml は次のとおりです。
Zuul ベースのルーティングを担当するゲートウェイ サーバーの application.yml は次のとおりです。
java - Spring Session Data Redis - Redis ストアから有効なセッション、現在のユーザーを取得する
私の質問は、分散 Web アプリケーションでは、RedisOperationSessionRepository
. (つまり、Redis ストアに入れるための明示的なコードを書きたくないので、後でそれを読み取ります。フレームワークまたはspring-data-redis
ライブラリがそれを提供しているかどうかを理解したいのです)。
Spring Redis はセッションを復元でき、セッションがまだ有効な場合はサーバーの再起動でもログインが保持されることを認識しています (Redis によってサポートされているため)。
私が探している機能の 1 つは、現在アプリケーションにログインしている可能性のあるすべてのユーザーを取得することです。SessionRegistryImpl
、およびこの方法を認識しています。しかし、このメソッドはRedisによってサポートされておらず、サーバーの再起動後、ログインユーザーが返されないことに気付きました.
私が試すことができる機能の 1 つは、Spring Session 1.1.0 の Spring session find by username です。
- http://docs.spring.io/spring-session/docs/1.1.0.M1/reference/html5/guides/findbyusername.html
- https://spring.io/blog/2015/11/17/spring-session-1-1-0-m1-released
試してみたところ、実際に有効なセッション結果が返されましたが、問題は、このアプリケーションを使用している現在の有効なユーザー名をすべて知る必要があることです。(Redis Store を使用してそれらを取得する方法がわかりません。ここでも Redis に保存して取得できますが、より良い方法があるかどうか知りたいです)。
これはコードの一部です。これは、セッション ID がわかっている場合に、現在システムを使用している多くのユーザーの 1 人から現在のユーザーを取得できる方法です。
これで、上記のロジックを使用して現在のユーザーをすべて取得できますが、Redis ストアから取得する方法がわからない有効なセッション ID をすべて取得する必要があります。
新しい更新:
https://github.com/spring-projects/spring-session/issues/255
このリンクでは、おそらくすべてのセッション ID を取得して、アクティブなセッションを探すことRedisOperationSessionRepository
ができますが、パフォーマンスの問題が発生する可能性があります。
私が自分自身を明確にしたかどうかはわかりませんが、Spring セッション API を使用して Redis に何かを伝えることはできません。現在ログインしているすべての有効なセッションとその現在のユーザーを教えてください。それ)。
ありがとうございました
redis - Spring Data Redis - コマンド PUBSUB CHANNELS のサポート
RedisTemplate はPUBSUB CHANNELSコマンドをサポートしていません。したがって、1つの方法は次のようにすることです
これは提案されたアプローチですか?
spring-data - spring-data-redis 1.7.x およびレタス 4.1.x - java.lang.IncompatibleClassChangeError
レタスのバージョン 3.4.x を使用すると問題なく動作します。レタスが 4.1.x に更新されたときに (抽象クラスからインターフェースに) クラス コントラクトが変更されたように見えますが、spring-data-redis 1.7.x はそれを認識していません。次のエラーが表示されます。
Spring データ redis チームがそれに取り組んでいるかどうかわからない? または、4.1.x バージョンのレタスを維持するために使用できる回避策や提案はありますか?
java - 春にStringRedisSerializerを使用して、xml構成ファイルの代わりにJavaコードでセッションをredisに保存する方法
私の春はセッションをredisに保存しますが、キーは "\xac\xed\x00\x05t\x00(spring:session") のようなものです。今、私は奇妙な接頭辞を削除したいのですが、解決策がRedisTemplateでStringRedisSerializerを使用していることを知っていますが、私の以下の構成コードは機能しません。
xml 構成ファイルを使用して同じことを行うという回答がありますが、私は純粋な Java コードを使用することを好みます。上記のコードを手伝ってくれる人はいますか? どうも。