Redis 동시성 이슈 개선하기
2022. 5. 14. 13:32
Spring
Redis에서 조회수 증가 동시성 이슈 조회수를 Redis에 캐싱하고 나중에 RDB로 write back해야하는 일이 있었다. Redis에서 해야하는 일은 게시물이 조회되면 → 해당 게시물의 id를 key로하여 조회수를 저장하는 일이다. 이슈 사항 먼저 조회수에 대한 상세 로직은 아래와 같다. Transaction1(T1)이 게시글 1번의 조회수를 조회한다. T1은 조회수를 1 증가한다. 조회수는 최종적으로 1증가 되어 Redis에 저장된다. 하지만 T2가 동시에 요청을 하면? 아래와 그림과 같은 이슈가 발생한다. T1과 T2가 조회수를 조회한 후 T1이 변경하고 T2가 변경했을 때 각자 조회한 조회수가 동일했기 때문에 동기화가 안되는 현상이다. 즉, 최종적으로는 조회수가 12가 되어야 하는 것이다. 이..
RedisTemplate CastClassException(직렬화, 역직렬화 이슈)
2022. 5. 12. 15:17
기타 IT
RedisTemplate 설정 시 직렬화 역직렬화 문제 RedisTemplate 설정을 하고 Redis에 저장을 해보면, byte코드로 저장이되는 현상이있다. key가 저장되는데 저렇게 저장되니 cli에서 값을 조회를 할 수가 없었다. 아주 불편한 사항이다. (아래 사진과 같이) 문제1 - 직렬화 key가 사람이 알기 어려운 문자로 저장되어 있다. 먼저 직렬화 역직렬화 인터페이스는 `RedisSerializer `이다. 알아만 놓자. Spring Data Redis는 기본 직렬화 구현체가 JdkSerializationRedisSerializer이다. 여기서 직렬화하는 내부 로직을 살펴보면, conver()가 있다. 여기를 살펴보자. JdkSerializationRedisSerializer.java Ser..
Redis는 언제 사용해야 할까?
2022. 5. 11. 13:15
기타 IT
블로그 프로젝트의 조회수 증가를 Redis로 관리하기로 결정했다. Redis가 무엇인지 알아보고, 왜 Redis를 써야하는지와 어떻게 사용할 것인지에 대해 정리해보자. Redis 개요 Redis는 Remote Dictionary Server의 약자이다. Remote: 외부를 의미하고 Dictionary: HashMap과 같은 key - value 자료 구조 Server: 서버를 의미한다. 즉, 외부에 있는 key - value의 자료구조를 사용하는 서버이고 데이터베이스를 의미한다. 인메모리 데이터 저장소 레디스 공식 홈페이지를 보면, 이렇게 설명한다. 데이터베이스, 캐시, 스트리밍 엔진 및 메시지 브로커를 인메모리 데이터 저장소로 사용한다. 그렇다, 핵심은 인메모리이다. Cache 개념 나중의 요청에 대..