public double getAverageRatingByItemId(
final Long itemId,
final String cacheKey
) {
String averageRate = listOperations.index(cacheKey, 0);
if (averageRate != null) {
return Double.parseDouble(averageRate);
}
Double dbAverageRate = reviewRepository.findAverageRatingByItemId(itemId);
Long numberOfReviews = reviewRepository.countByItem_ItemId(itemId);
listOperations.rightPushAll(cacheKey, String.valueOf(dbAverageRate),
String.valueOf(numberOfReviews));
return dbAverageRate;
}
String averageRate = listOperations.index(cacheKey, 0);
이 부분을 원래 Double로 형변환 후 null 체크를 하려했다.
그러나 null 체크 없이 형변환하려니 오류가 발생했다.
Cannot invoke "String.trim()" because "in" is null
위의 코드처럼 null 체크를 먼저 하고나서 형변환을 해야한다.
Redis의 lists는 Queue처럼 되어있어서 leftPush, rightPush를 생각하면서 해야한다. 그렇지 않으면 해당 인덱스에 원하는 데이터가 없을 수 있다.
처음에 leftPush로 값 넣고 다시 가져오려다가 이상한 데이터를 가져와서 의아했다.