Redis 10

[트러블슈팅] Redis 호출 5번을 Pipeline으로 1번에 끝내기

공고 상세 조회 API에서 Redis 명령을 개별로 5~6번 호출하던 구조를 Pipeline으로 개선한 과정을 정리해 보겠습니다.이전에 공식문서를 통해 Redis를 공부하고 있었을 때 Pipeline이라는 것을 알게 되었습니다 Redis 공식문서의 예제 코드는 다음과 같습니다 //pop a specified number of items from a queueList results = stringRedisTemplate.executePipelined( new RedisCallback() { public Object doInRedis(RedisConnection connection) throws DataAccessException { StringRedisConnection stringRedi..

캐시 3대 문제

최근에 레디스에 대해 정리하고 , 사이드 프로젝트에서 캐싱 관련 작업을 하던 도중 인사이트를 얻기 위해서 자료를 찾아보고 있었습니다. 자료를 찾아보니 흔히 캐시 3대 문제라고 하는 문제가 있습니다.그 종류는Cache PenetrationCache AvalancheHot Key Problem해당 내용을 정리해보고 싶어 글을 쓰게 되었습니다1. Cache Penetration (캐시 관통) Cache Penetration은 캐시를 아예 뚫고 지나가는 문제입니다.원래 캐시는 이렇게 동작해야 합니다.요청이 들어오면 먼저 캐시에서 찾고 → 있으면 캐시에서 바로 반환하고 → 없으면 DB에서 가져온 다음 캐시에 저장 근데 여기서 문제가 생깁니다. 만약 DB에도..

Spring에서 Redis 쉽게 사용하는 방법 정리 -활용

Spring은 Redis를 편하게 사용할 수 있도록다양한 추상화와 기능을 제공합니다.즉 단순 Redis Client 수준이 아니라Template 패턴Cache 자동 처리메시징 지원Reactive 지원까지 제공하여Redis를 매우 쉽게 사용할 수 있는 환경을 만들어 줍니다.이번 글에서는실무에서 자주 사용하는 기능만 핵심 위주로 정리해 보겠습니다 Spring에서 Redis 쉽게 쓰게 해주는 핵심 기능RedisTemplateStringRedisTemplateSpring Cache abstractionRedis RepositoryMessage Listener (Pub/Sub)Reactive Redis 1. RedisTemplate (가장 핵심)Spring Redis의 중심 클래스입니다.Redis 명령어를 Jav..

Spring Data Redis 공식문서로 내부 동작 이해하기

Spring Boot에서 Redis를 사용할 때 우리는 보통 아래처럼 아주 간단하게 사용한다.stringRedisTemplate.opsForValue().set("user", "donguk"); 하지만 이 한 줄 뒤에서는 생각보다 많은 계층과 추상화가 동작하고 있다.이 글에서는 Spring Data Redis 공식 문서 기반으로RedisTemplate 내부 동작Lettuce의 역할RedisConnection 추상화StringRedisTemplate 차이HashMapper 동작Redis 트랜잭션 구조Spring Boot Auto Configuration까지 전체 흐름을 깊게 정리해 본다. 참고 : https://docs.spring.io/spring-data/redis/reference/ Spring Da..

Redis 운영 시 반드시 알아야 할 위험 요소(위험한 명령어 / 메모리 폭발 / 모니터링 / 권장 설정)

지금까지 Redis의 개념, 자료구조, 캐싱 전략, 아키텍처, 영속성까지 정리했습니다.이제 마지막으로실무에서 Redis를 운영할 때 반드시 알아야 하는 장애 포인트와 운영 전략을 정리해 보겠습니다Redis는 매우 빠르고 강력하지만 잘못 사용하면 서비스 전체 장애를 유발할 수 있는 위험한 시스템이기도 합니다.Redis 운영 시 위험한 명령어 Redis는 Single Thread 기반으로 동작합니다 그래서 하나의 무거운 명령어가 실행되면전체 요청이 Block 될 수 있습니다. 레디스가 명령어를 처리하는 방법을 간단하게 알아보자면 Packet들 이 Redis의 processInputBuffer에 전해지면 그곳에서 packet들이 모여 하나의 Commnad를 만들게 되고 process Command에서 실제 ..

Redis 영속성 & Failover 정리 (RDB / AOF / Failover)

지금까지 Redis 아키텍처까지 정리했습니다. “Redis는 메모리 저장소인데 서버가 죽으면 데이터는 어떻게 되는가?” “Redis 장애가 발생하면 서비스는 어떻게 복구되는가?” 이번 글에서는RDBAOFFailover처럼 Redis 운영에서 반드시 알아야 하는 핵심 개념을 정리해 보겠습니다Redis 영속성Redis는 모든 데이터를 메모리에 저장합니다.그래서 매우 빠른 대신 서버 장애 시 데이터 유실 가능이를 방지하고자 Redis는 영속성(Persistence) 기능을 제공합니다 여기서 AOF와 RDB에 저장되는 데이터는 AOF는 레디스 프로토콜 형태로 RDB는 바이너리 형태로 저장되기 때문에 사람이 읽을 수 없습니 RDB (Redis Database Snapshot)RDB는특정 시점의 메모리 데이터를..

Redis 아키텍처 정리 (Replication / Sentinel / Cluster / Sharding)

지금까지 Redis의 개념, 자료구조, 캐싱 전략까지 정리했습니다.이제 진짜 중요한 단계입니다. 트래픽이 커졌을 때 Redis를 어떻게 운영할 것인가? 실무에서는 단일 Redis 서버로는 성능 / 안정성 / 확장성 모두 한계가 옵니다.그래서 Redis는 다양한 아키텍처 기능을 제공합니다.이번 글에서는ReplicationSentinelClusterSharding처럼 대규모 트래픽 대응 핵심 구조를 정리해 보겠습니다Redis 아키텍처 종류 Redis의 아키텍처는 간단히 말하면 3가지의 종류를 가지고 있습니다이제 각각의 아키텍처를 알아보겠습니다 Replication 이란?Redis를 사용하는 주된 이유 중 하나가 이 Replicaiton 때문입니다 Replication을 이용하면 다음과 같은 성능을 얻을 ..

Redis 캐싱 전략

지금 까지 Redis의 개념과 자료구조를 정리했습니다.하지만 실무에서 Redis를 사용할 때 가장 중요한 것은 단순 사용법이 아니라 어떤 캐싱 전략을 선택할 것인가입니다 같은 Redis라도 캐싱 전략에 따라 성능데이터 정합성장애 대응시스템 구조 가 달라지게 됩니다.이번 글에서는 실무에서 반드시 알아야 하는 캐싱 전략들을 정리해 보겠습니다 Look Aside (Lazy Loading) 애플리케이션에서 데이터를 읽을 때 가장 많이 사용하는 캐싱 전략입니다흐름은 다음과 같습니다.Cache에서 데이터를 먼저 확인 Cache 에 데이터가 있으면 Cache에서 가져온다Cache 에 데이터가 없다면 DB에서 데이터를 읽어온다DB에서 얻어온 데이터는 Cache에 저장하고 응답으로 내보낸다 즉 Cache Miss 가 ..

Redis 자료구조 완전 정리 (실무에서 가장 많이 쓰는 구조들)

이전 글에서는 Redis 캐시가 무엇이고 왜 필요한지에 대해 정리했습니다.이번 글에서는 Redis를 강력하게 만드는 핵심 요소인 “자료구조”에 대해 알아보겠습니다 ✨많은 사람들이 Redis를 단순한 캐시 서버라고 생각하지만 실제로 Redis는 “자료구조 서버(Data Structure Server)”라고 불릴 정도로 다양한 구조를 제공합니다.그리고 이 자료구조들을 잘 활용하면 복잡한 기능도 매우 간단하게 구현할 수 있습니다. 그리고 본격적으로 설명하기전에 이 글을 쓸 때 참고하게 된 유튜브 강의 2개를 추천하고 정리를 시작해 보겠습니다 https://youtu.be/92NizoBL4uA?si=uy_yYhhKpZneuRashttps://youtu.be/mPB2CZiAkKM?si=AUZUIpTufkLPY_I..

Redis 캐시란 무엇이고, 왜 DB 대신 Redis를 사용할까?

평소에 Redis를 단순히 RefreshToken과 AccessToken을 저장하기 위해 쓰고 , 가끔은 랭킹 시스템을 쉽게 구현하기 위해서 , 그리고 Cache를 사용하기 위해서 아주 일부분만 사용하였습니다.조금 더 잘 써보고 싶어서 유튜브 강의를 찾는 도중 2개의 강의를 찾을 수 있었고 해당 강의를 들으면서 배운 내용을 정리해 보고자 합니다! 제가 들은 강의는 아래 2개 입니다 관심이 생기면 꼭 한번 들어보는걸 추천합니다 https://youtu.be/mPB2 CZiAkKM? si=r7Ux2-tzemR3 DvIL https://youtu.be/92 NizoBL4 uA? si=mGV4 kYfZh6 mRBa4 D캐시(Cache)란 무엇인가?캐시는 간단히 말해 원본 데이터를 보다 더 빠르게 접근하기 위해 ..