[Jedis] Subscribe時にClassCastException

JavaのRedisクライアントであるJedisを使って、Redis Pub/SubのSubscribeするクライアントを作ってたんだけど動作確認してみると ClassCastException - [B cannot be cast to java.util.List という例外が発生する。

原因

作成したプログラムではdaemonとして稼働するんだけど、中では2つのスレッドが動いていて

  1. きちんとdaemonが正常稼働していることをRedisの特定キーに書き込むスレッド
  2. チャンネルをSubscribeしてRedisからデータを受け取るスレッド

各スレッドはJedisが提供するJedisPoolを使ってRedisのコネクションを取得していたんだけど、Subscribeするコネクションが1.で使用される (あるいは逆の) 状況が発生していたんじゃないかと推測。

解決方法

Subscribeするスレッドは JedisPool からではなく、普通に new Jedis(hostname); するように修正したところ、再現しなくなった。

コメント

このブログの人気の投稿

Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER is marked for publish/export but is not exported on the project classpath

蛍光灯フリッカー現象 (ちらつき) の対策

[node.js] CP932のテキストを読み込む