Redis와 캐시 서버

Redis란

  • 인메모리 데이터베이스로, 키-값 형태의 데이터 구조를 가지고 있다.

  • 인메로리 데이터베이스이기 때문에 디스크 입출력 없이 속도가 빠르다.

    • 휘발성을 지니고 있다.

  • 키-값 형태의 데이터 구조를 갖고 있기 때문에 유연한 데이터 관리가 가능하다. 

  • 캐시 서버나 트래픽을 분산을 위해 사용된다.

 

 

Redis 구동

  • 다음 명령어로 redis가 설치된 위치에서 redis 서버를 구동시킨다.

    1. redis-server

  • 다음 명령어로 redis 클라이언트에 접속이 가능하다.

    1. redis-cli

  • 클라이언트 명령어

    • get {key}

      • 특정 키의 값을 조회한다.

      • key에 *를 입력할 경우 모든 데이터를 조회한다.

    • set {key} {value}

      • 특정 키 값을 세팅한다.

    • del {key}

      • 특정 키의 값을 삭제한다.

    • flushall

      • 모든 데이터를 삭제 처리한다.

 

 운영 이슈

  • 데이터 크기가 큰 경우에 redis timeout 오류가 날 수 있다

    • 이 경우, timeout을 늘려주는 것만이 방법은 아니다

    • api를 분리하여 데이터를 쪼개서 보내거나 ttl을 늘리는 방법도 있다

  • timeout 관련 설정

    • timeout -> 연결된 클라이언트의 idle time과 관련이 있다. 0으로 설정하면 연결을 끊지 않는다.

    • tcp-keepalive -> 클라이언트가 연결 끊은 상태에서 레디스 서버에서 연결을 잡고 있을 시간. 0으로 설정하면 연결을 끊지 않아 끊긴 연결이 계속해서 쌓일 수 있다.

    • Redis cli 설정값 확인

      • config get { timeout | tcp-keepalive | maxclients | tcp-connection)

      • netstat -antp | grep 6379 | wc -l를 통해서 접속한 수 확인 가능하다. -> maxclients와 비교해볼 수 있다.

 

스프링 캐시매니저

  • spring에서 cache를 사용할 경우 어노테이션 이외에도 cacheManager로 직접 관리가 가능하다. 

    • 의존성 주입 후에 cacheManager.getCache("캐시명")

    • Cache 객체에서 key로 get() 호출

    • ValueWrapper 객체에 값이 있으면 원하는 객체 형태로 형전환 후 사용 가능하다.

    • evict 또는 put도 가능하다.

 

 

댓글을 작성해보세요.

채널톡 아이콘