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;
    }

Trouble 1

String averageRate = listOperations.index(cacheKey, 0);

이 부분을 원래 Double로 형변환 후 null 체크를 하려했다.

그러나 null 체크 없이 형변환하려니 오류가 발생했다.

Cannot invoke "String.trim()" because "in" is null

위의 코드처럼 null 체크를 먼저 하고나서 형변환을 해야한다.

Trouble 2

Redis의 lists는 Queue처럼 되어있어서 leftPush, rightPush를 생각하면서 해야한다. 그렇지 않으면 해당 인덱스에 원하는 데이터가 없을 수 있다.

처음에 leftPush로 값 넣고 다시 가져오려다가 이상한 데이터를 가져와서 의아했다.