佐久間です。
個人開発で作成しているアプリで、キャッシュサーバを使用した環境に対応できるようにソースの修正を先週末あたりから進めています。
ちなみに、RedisどころかNoSQLも初めてです。
概念を理解するのに苦戦中ですが、NoSQLの長所短所が感覚的に理解できてきました。すごいぞNoSQL…!
今回はSpring Data Redisを理解していなくてClassCastExceptionが発生したのでその対処法を少しだけ。
よくある普通のClassCastExceptionです。
public int getCount(Integer eventId) {
HashOperations<String, String, Integer> ops = redisTemplate.opsForHash();
int count = ops.get(“views”, “eid” + eventId).intValue();
return count;
}
}
大体こんな感じです。
何が悪かったのか。
答えはStringRedisTemplateをインジェクトして使用していることですね。
StringRedisTemplateはRedisTemplate<String, String>を継承したクラスです。
RedisTemplate<String, Integer>じゃないのでエラーになってるっていう単純な話です。
ソースを修正します。
まずはこうします。
これだけだとRedisTemplate<String, Integer>がDIの管理対象になっていません。
「@EnableCaching」を付与したクラスに以下のような記述を追加します。
これだけの話でした。
ちなみに、Integerでパラメータ化せず、Object型で抽象化させておくと一つのBeanを使い回せて便利です。
Spring Data Redisの記事は1年くらい前の記事でも書きっぷりが違くて参考にならないものが多いです。
私のようなRedis初心者だと理屈が分からず変なところで躓きがちなので、記事にしてみました。