javaで初めてredisに接続する際の問題点
1. javaでredisに接続すると、以下のエラーが発生し、接続がタイムアウトします。
スレッドで例外発生 "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException.JedisConnectionException: ソフトウェアが原因で接続が中断されました:recvに失敗しました
at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:202)
at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
at redis.clients.jedis.Protocol.process(Protocol.java:151)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:239)
at redis.clients.jedis.Jedis.set(Jedis.java:121)
at com.hy.redis_maven.App.main(App.java:17)
原因:java.net.SocketException: ソフトウェアが原因で接続が中断されました: Recv に失敗しました
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:196)
... 7件以上
この問題の原因は、redis.conf ファイルに 127.0.0.1 というバインドがあるため、redis がローカルマシンのみをマッピングしてしまうことです。
解決策は、以下のようにbind 127.0.0.1:をコメントアウトすることです。
2. 2.redisに接続する際に発生した2つ目の問題は、パスワードが設定されていないのに認証が送信され、以下のようなエラーが発生することです。
スレッド "main" redis.clients.jedis.exceptions.JedisDataException で例外が発生しました。DENIED Redis は保護モードが有効で、バインドアドレスが指定されておらず、クライアントに認証パスワードが要求されていないため、保護モードで動作しています。外部のコンピュータからRedisに接続したい場合は、以下のいずれかの解決策を採用することができます。1) ループバックインターフェースから「CONFIG SET protected-mode no」コマンドを送信してプロテクトモードを無効にし、サーバーと同じホストからRedisに接続する。2) あるいは、サーバが動作しているのと同じホストから Redis に接続し、ループバックインタフェースから 'CONFIG SET protected-mode no' コマンドを送信して、保護モードを無効にすることもできますが、その場合は Redis がインターネットから一般にアクセスできないことを確認してください。4) バインドアドレスまたは認証パスワードを設定する。注:サーバーが外部からの接続を受け付け始めるためには、上記のうちの1つだけを行う必要があります。
at redis.clients.jedis.Protocol.processError(Protocol.java:127)
at redis.clients.jedis.Protocol.process(Protocol.java:161)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:239)
at redis.clients.jedis.Jedis.set(Jedis.java:121)
at com.hy.redis_maven.App.main(App.java:17)
おそらくこれは、パスワードは設定されていないが、パスワード認証は送信されるという意味だと思われる
解決策:redis.confファイルでrequirepass passwordを設定し、コメントを削除して、以下のようにします。
ウォームアップ後にredisサーバーを起動する際に、設定ファイル
src/redis-server redis.conf
これでパスワード認証の問題は解決し、クライアントコードは以下のようになります。
public class App {
<未定義
public static void main(String[] args) { {
<未定義
<スパン
Jedis jedis = new Jedis("192.168.190.120", 6379)を使用します。
jedis.auth("zhoupengyong") を使用します。
jedis.set("name", "zhoupengyong") を実行します。
<スパン
System.out.println(jedis.get("name")));
}
}
関連
-
[解決済み】127.0.0.1:6379 で Redis に接続できませんでした。homebrewで接続が拒否された
-
[解決済み] MISCONF RedisがRDBスナップショットを保存するように設定されている。
-
[解決済み] レディス パターンに一致するキーを検索する
-
[解決済み] エラーです。スタンナルメソッドでElastic cacheに接続中、ピアによって接続がリセットされました。
-
[解決済み] Redis Dockerの接続が拒否されました
-
[解決済み] Redisインスタンスのバージョンを確認する方法は?
-
[解決済み] Zookeeper vs インメモリデータグリッド vs Redis
-
を作ってください。*** ターゲット "install "を作るためのルールがありません。停止
-
Linux installation of redis common error server.c:3318:16: error: 'struct redisServer' has no member named 'loading '
-
redis の高可用性 --- マスタースレーブレプリケーション、センチネル、クラスタ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン