java 배우기/TIL

카드 조회수에 redis 사용해보기

checkuu 2024. 10. 17. 18:02

이번에 팀 프로젝트를 진행하면서 특정 카드를 조회시 조회수가 증가하는 로직을 구현하였다.

 

ticket을 조회하는 메서드 ticketViewHistory entity를 새로 만들어서 해당 카드를 본 유저 + 티켓 + 본날짜를 기록으로 남기도록 짰다.

그리고 한번더 조회할 시 해당 기록을 토대로 이미 오늘 조회한 이력이 있는 유저면 조회수가 증가하지 않게 로직을 짰다.

같은 유저로 티켓 조회를 여러번 눌러도 뷰수가 더이상 올라가지 않는 것을 확인했다.

ticket_view_history가 db에 남은 모습

ticket 테이블에 뷰수가 남는 모습

 

그리고 일일 조회수를 목적으로 만들었기 때문에 자정이 지나면 지워 지도록 스케줄러를 이용해 메서드를 만들었다.

 

정상 작동이 되는것을 확인한 후 조회수를 DB에서 관리하는게 아니라 redis를 사용해볼겸 redis에다 저장하고 12시에 삭제 되는 방식을 고안해봤다.

 

레디스를 이용해서 조회수를 저장하고 불러오는 메서드를 만들었다.

 

레디스에 있는 데이터는 자정마다 지워지도록 스케줄러를 사용하였고, 총 조회수를 기록하기 위해 삭제전 레디스에 있는 데이터를 DB에 넣어주는 작업을 진행하도록 만들었다.

레디스인사이트를 통해서 데이터가 잘 들어갔는지 확인이 가능하다

스케줄러가 정상 작동하는지 알아보기 위해 원래는 자정이지만 2분마다 작동하도록 설정

다 비워진것을 확인했다.