본문 바로가기

Redis

(Django) CacheOps - ORM에 Redis Cache 쉽게 적용하기 django-cacheops는 Django에 Redis Cache를 쉽게 적용하고, 관리할 수 있도록 도와주는 라이브러리이다. Cacheops의 가장 큰 장점은 ORM에 캐시를 간편하게 적용할 수 있단 점이다. 이번 포스팅에서는 Cacheops의 특징과 주의할점에 대해서 정리해보고자 한다. Cacheops의 특징 A. ORM Cache A-1. 사용방법 모델에서 캐시를 바라보도록 변경하고 싶으면, 설정 파일에 아래와 같은 옵션을 추가해주면 된다. CACHEOPS = { 'auth.user': {'ops': 'get', 'timeout': 60}, } 위와 같이 추가하면, User 모델을 get으로 조회하는 경우, DB보다 캐시를 먼저 바라보게 된다. User.objects.get(user_id=1) 특정..
[Redis]Redis에서 LRU Cache를 사용하는 방법 Using Redis as an LRU cache Redis에서는 새로운 값이 추가되었을 때, 자동으로 오래된 데이터를 지워주는 기능이 있다. Memcached 시스템이서도 이러한 기능이 있기 때문에, 개발자들 사이에서는 익숙한 기능이다. 이 포스트에서는 메모리 사용량 제한을 위해서 사용하는 값인 maxmemory, 메모리 관리 정책인 eviction policy, 원조 LRU와 REDIS LRU의 차이에 대해서 이야기할거다. Maxmemroy 설정하기 maxmemory 값은 redis.conf 파일이나 config set 커맨드 명령문으로 설정할 수 있다.maxmemory 100mbmaxmemory를 설정해주지 않으면, 64bit 시스템에서는 초기값이 0으로 설정된다. 32bit 시스템에서는 3GB으로..
[Redis]라이브 환경에서 설정 변경하기 config set 명령문을 사용하면, 레디스 서버를 재가동하지 않아도, 환경 변수 값을 변경할 수 있다. redis.conf 파일에서 사용할 수 있는 모든 환경변수들을 config set 명령문으로 변경할 수 있다. 그래서 maxmemory, memory 관리 정책 등을 변경해줘야할 때, 이 명령문을 사용하면 redis를 재가동하지 않아도 된다. 예시 CONFIG SET MAXMEMORY 100000 참고 자료 https://redis.io/commands/config-set
[Redis]메모리 관리 방식 조사 배경TTL이 만기된 캐시키들이 삭제(evicted)되지 않는 현상을 발견하면서, 레디스에서 메모리를 관리하는 방법이 궁금해졌다 알게된 것* 레디스는 아래의 세가지 상황 때, 메모리를 정리한다. A. 만료된 키를 가져올 때 B. 샘플링한 데이터 중에 만료된 키가 있는 경우 C. 메모리 관리 정책을 설정했을 때, 논리적인 데이터 사용량이 maxmemory를 초과한 경우 => 실제 사용량으로 잡히는 rss를 기준으로 메모리를 정리하지 않는다. * 레디스는 jemalloc을 쓴다. * 용량이 큰 데이터를 자주 썼다가, 지우면 파편화가 발생하기 쉽다. 그리고 데이터의 크기 편차가 크면, 파편화가 생기기 쉽다. 실제 사용량보다 rss가 높게 나온다는 거다. 이 경우를 해결하려면, 장비를 이전하는게 낫다. 데뷰..
[Cache]Redis vs Memcached VS 캐시를 사용할 때, Redis와 Memcached 중 어떤걸 선택해야하는지고민이 될 때가 있다. 그래서 실무에서 발생하던 사건들과 책과 구글에서 본 내용을 기반으로, 어떤 경우에 두 캐시가 각각 유용한지 정리해보려고 한다. Redis 장점- 디스크에 데이터를 기록하고 있기 때문에, Redis 메모리가 날라가도 데이터를 복구할 수 있다.( 스냅샷을 떠서, 이를 사용하는 RDB 방식과 Write / Update Event를 로그에 남겨서 이를 기반으로 복구하는 AOF 방식 두가지가 있다. )- 다양한 데이터 포맷을 지원한다. String, List, Set, Sorted sets, Hash 등의 데이터 포맷을 지원한다. 그래서 애플리케이션 단에서 편하게 데이터를 저장하고, 사용할 수 있다.- Memca..