외부에 있는 key-value를 저장하는 서버 ( No-SQL )
휘발성이지만 별도로 보완책이 존재함
데이터를 빠르게 저장하고 가져오는데 좋은 성능을 발휘하는 도구
카운터 (Counter)로 사용하기
조회수, 방문자 등을 클라이언트에게 보여줘야 할 경우
(DB에 직접 저장할 수 있지만, 1초에 너무 많은 업데이트가 필요한 경우
많은 DB 리소스를 소모하여 처리가 안되거나 누락되기도 한다.)
좋아요/팔로우 등의 기능은 버튼을 누를 때마다 DB에 읽기/쓰기 연산이 이루어진다.
다량의 insert/update는 RDB의 성능을 크게 저하시킴
모든 처리는 Redis를 이용해서 하고, 영속적인 저장이 필요할 때 데이터를 DB로 옮기면 된다.
데이터의 크기가 너무 크지 않을 때 Redis 사용을 고려해볼 수 있다.
모든 유저에게 매번 데이터베이스를 읽어서 보여주는게 아닌, 미리 불러오기 (Load)해서
Redis에 저장을 해두고 사용
DB에서 데이터를 조회해서 Caching하고 요청을 처리한다는 흐름 구조이다.
➖ 캐싱이 의미가 없어지는 데이터는 Redis가 오히려 효율이 떨어진다.
➖ 결과 값이 계속 갱신되는 데이터 -> 캐시도 계속하여 변경 필요 -> 효율 하락
캐시에 저장할 데이터의 특성을 고려하는 것이 필요하다.
Write Back (Write Behind) 패턴
데이터를 저장할 때 바로 DB에 저장하는 것이 아닌 캐시에 모아 두었다가 한번에 저장
(N개의 데이터를 하나씩 저장하는 것보다 bulk create하는 것이 더 빠르기 때문)
➖ 캐시에서 장애 발생 시 데이터 누락의 가능성이 있음
Write Through 패턴
데이터를 캐시에도 저장하고, DB에도 저장하는 방식
캐시를 이용해서 DB를 동기화
캐시의 데이터가 항상 최신 데이터로 유지된다.
두번의 저장이 이루어지기 때문에 데이터 유실에 민감한 로직에서 사용한다. -> 속도가 다소 느리다.