問題タブ [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-boot - spring-data-redis で複数の redis インスタンスに接続する方法
1 つの springboot アプリケーションを 2 つの異なる redis インスタンスに接続しようとしています。1 つはデータベースとして使用され、もう 1 つはキャッシュとしてのみ使用されます。さまざまな接続ファクトリーと redis テンプレートをさまざまな名前で追加し、@Qualifier を使用してそれらをリンクしています。自動構成からクラス RedisAutoConfiguration を無効にしようとしましたが、何も機能しません。
私はいつもこのエラーを受け取ります:
ラップ: org.springframework.beans.factory.UnsatisfiedDependencyException: クラス パス リソース [org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration$RedisConfiguration.class] で定義された名前 'redisTemplate' を持つ Bean の作成中にエラーが発生しました: を通じて表現された満たされていない依存関係タイプ [org.springframework.data.redis.connection.RedisConnectionFactory] のインデックス 0 を持つコンストラクター引数: タイプ [org.springframework.data.redis.connection.RedisConnectionFactory] の適格な Bean が定義されていません: 単一の一致する Bean が予想されますが、2 が見つかりました: redisCacheFactory、redisJitFactory; ネストされた例外は org.springframework.beans.factory.NoUniqueBeanDefinitionException: タイプ [org.springframework.data.redis.connection.RedisConnectionFactory] の適格な Bean が定義されていません: 単一の一致する Bean が予想されますが、2 が見つかりました: redisCacheFactory,
これをどのように実装できるかについてのヒントを教えてください。
前もって感謝します!
redis - spring-data-redis トランザクションでリストを照会できません
こんにちは、みんな。redis に「mylist」というリストがあり、そのサイズは 50 です。
しかし、このコードを実行すると、必要なものが得られません。
フィールド「dataList」は null ですが、値「Hello World」を持つ「mykey」が私の redis に保持されています。
では、spring-data-redis トランザクションでリスト データを取得するにはどうすればよいでしょうか? どうもありがとう。
redis - spring-data-redis クラスターの回復の問題
すべてのノードをマスター (スレーブ レプリケーションなし) として、7 ノードの Redis クラスターを実行しています。これをメモリ内キャッシュとして使用しているため、redis.conf 内のすべての保存をコメントアウトし、redis.conf 内に次のようなデフォルト以外のものを用意しました。
このクラスターのクライアントは、ドライバーとして jedis で spring-data-redis を使用する spring-boot REST API アプリケーションです。主にスプリング キャッシング アノテーションを使用します。
先日、マスターの 1 つがしばらくダウンするという問題が発生しました。7 ノード クラスターで 1 つのマスターがダウンした場合、redis を含む API 呼び出しの平均応答時間が大幅に増加することがわかりました。
ダウンしたマスターがオンラインに戻ってクラスターに再び参加したとき、応答時間に大幅なスパイクが発生しました。newrelic を介して、アプリが大量の redis クラスター呼び出しを開始したことを確認できます (newrelic は、どのクラスター サブコマンドが使用されたかを通知しません)。通常の平均応答時間は約 5 ミリ秒です。この間に最大 800 ミリ秒になり、70 秒を超える遅いサンプル トランザクションがいくつかありました。この間、すべてのアプリ jvm で、アクティブなスレッドの数が通常の 8 ~ 9 から約 300 に跳ね上がっていることがわかります。最大 400 スレッドを許可するように tomcat http スレッド プールを構成しました。約 3 分後、問題は解消されましたが、選択したキャッシュ ソリューションの安定性に疑問を持っている人がいます。Newrelic は、長いリクエストの追加の時間がどこに費やされているかについての洞察を提供しません (それは '
開発環境に対していくつかの jmeter 負荷テストを実行して再現を試みましたが、redis-cluster マスターを再接続するときに中程度の応答時間のスパイクが見られますが、本番環境で見たものに近いものは見られません. https://github.com/xetorthio/jedis/issues/1108にも出くわしましたが、そこから有益な洞察は得られません。spring.redis.cluster.max-redirects をデフォルトの 5 から 0 に減らしてみましたが、負荷テストの結果にはあまり影響がないように見えました。また、私のユースケースにどの程度の変更が適切かはわかりません。
java - JedisPoolConfig testOnBorrow を false に設定する
したがって、現在、JedisPoolConfig Bean では、パラメーター testOnBorrow を true に設定しています。これにより、リソースの取得が遅くなるようです。
Jedis が Redis からリソースを取得するのに 30 分かかるシナリオがありました (メソッド(redis.clients.jedis.BinaryJedis:exists:144 および java.lang.Thread:sleep) を数回呼び出してから、リソースを取得するか離脱します)。
私ができると思ったのは、パラメーター testOnBorrow を false に設定して、リソースを読み取る前に Redis への PING 呼び出しを防ぐことでした。
だから、私の質問(そして私は本当に私が答えを得ることを願っています)は次のとおりです:
- 「このパラメーターを設定すると、アプリはどうなりますか?」
- 「このソリューションは本当に効果的ですか?」
- 「読むのが遅いというこの問題に対するより良い解決策はありますか?」
spring - Spring @Cacheable および SimpleKeyGenerator を使用すると、衝突が発生する可能性があります
同じパラメーターで別のメソッドを使用@Cacheable
して呼び出すと、同じキーが生成されました。
SimpleKeyGenerator
キャッシュ名なしで生成されたキー。
spring-boot 1.3.2 と spring 4.2.4 を使用しています。
以下にサンプルを示します。
そして、テストを実行します:
それで、この問題を解決する方法はありますか?どうもありがとう。
アップデート
これが私のCacheManager
構成です。
spring-boot - Spring Actuator から Spring Session 情報を取得する
春のセッションをredisに保存する春のクラウドベースのアプリケーションがあります。Tomcat が組み込まれた Spring Boot を使用しています。
スプリング アクチュエータを使用する場合、/metrics エンドポイントは重要な情報を返しません。httpsessions.active は 0 に設定され、httpsessions.max は -1 に設定されます。
これは、Spring が httpsession 実装を独自の Spring セッション実装に置き換えるためだと推測しています。
エンドポイントからこの情報にアクセスする方法はありますか? できれば JMX を使用しますが、必須ではありません。
ありがとう。