캐시 4

spring boot의 self invocation, 이유와 해결법

spring boot의 self invocation, 이유와 해결법 회사에서 개발하는데 캐싱과 관련하여 self invocation 관련해서 이슈를 들었다. 그래서 한번 찾아보게 되었다. invocation 이거는 메서드 호출이라고 생각하면 된다. self-Injection?? 일단 문제상황에 대해 알아본다 다음과 같은 코드를 작성한다. (그리고 캐시 설정은 되어있다고 가정한다.) Ryoochan.java import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public cl..

캐시 전략

Redis의 캐싱 전략 개발을 할 때에 Redis를 통해서 값을 캐싱시켜 둔다면, 더 빠르게 값들을 처리할 수 있다. 이 이유를 간단하게 말하자면 DB를 통해 값을 가져오는 것 보다 캐시에 있는 데이터를 사용하면 성능면에서 더 빠르기 때문이다. 그렇기 때문에 cache miss(캐시된 데이터가 없어서 DB를 통해 해당 값을 가져온다.)를 적게 하고 cache hit(캐시된 데이터에서 바로 값을 가져옴)를 최대한으로 해야 한다. 또한 캐시는 RAM데이터를 사용하는데, 이게 데이터가 크지 않기 때문에 이를 잘 관리해야 한다. 즉 최대한 DB서버를 통하지 않고 Redis를 통해 값을 받을 수 있도록 하기 Redis의 크기를 효율적으로 관리하기 를 해내야 할 것이다. 이를 위한 전략들을 살펴보도록 한다. 읽기 ..

캐시 교체 정책에 관해서

Cache가 뭔데? 왜 하는데? 데이터나 값을 미리 저장해 두는 임시 장소이다. 굳이 이걸 미리 저장해 두는 이유는, 동일한 계산의 결과값이 필요할 때에 추가적인 결과 없이 미리 캐싱해둔 데이터들을 가져오면 더 빠르게 가져올 수 있고 어플리케이션에 부하가 덜 걸리기 때문이다. 캐시 교체 알고리즘 FIFO(First In First Out) 선입선출 - 먼저 입력된 캐시 순서대로 교체된다. LFU(Least Frequently Used) 사용 횟수가 가장 적은 캐시를 교체한다. LRU(Least Recently Used) 가장 오랫동안 사용되지 않은 캐시를 교체한다. LRU 알고리즘에 대해서 나머지는 대충 어떤 방식인지 알겠고, 딱봐도 잘 안쓰일것같다. 단점을 보면 FIFO 많이 쓰이는 데이터가 먼저 들어..

이론 정리 2022.11.06

Redis - cache, persistence 기초

Redis란? In-memory Data structure Store BSD 3 License Open Source 레디스를 쓸 때에 마음대로 코드를 수정하거나, 숨기거나 할 수 있다. 추가로 Redis module은 느낌이 다른데, 이건 Redis Enterprise를 제공해주는걸로 얘는 변경시 코드를 공개해야한다. Support Data Structures String, set, sorted-set, hashed, list Hyperloglog 유일한 원소 개수 추정에 사용되는 알고리즘. 속도가 매우 빠르고 오차가 적다고 한다. bitmap geospatial index 나에게서 얼마만큼의 거리에 있는 데이터들을 가져온다. stream Only 1 Committer 레디스 소스를 고칠 수 있는 사람은..