[Jedis] Subscribe時にClassCastException
JavaのRedisクライアントであるJedisを使って、Redis Pub/SubのSubscribeするクライアントを作ってたんだけど動作確認してみると ClassCastException - [B cannot be cast to java.util.List
という例外が発生する。
原因
作成したプログラムではdaemonとして稼働するんだけど、中では2つのスレッドが動いていて
- きちんとdaemonが正常稼働していることをRedisの特定キーに書き込むスレッド
- チャンネルをSubscribeしてRedisからデータを受け取るスレッド
各スレッドはJedisが提供するJedisPoolを使ってRedisのコネクションを取得していたんだけど、Subscribeするコネクションが1.で使用される (あるいは逆の) 状況が発生していたんじゃないかと推測。
解決方法
Subscribeするスレッドは JedisPool からではなく、普通に new Jedis(hostname);
するように修正したところ、再現しなくなった。
コメント
コメントを投稿