Redis와 캐시서버

  • 캐시(cache)

    • 자주 사용하는 데이터나 값을 복사해두어 사용 비용을 절감

    • 자주 변경하지 않는 데이터 또는 자주 조회하는 데이터를 캐시에 두고 사용한다

      • 이미지나 이벤트 정보

    • 일시적으로 필요한 데이터, DB에서 관리할 필요가 없지만 서비스에서 사용하는 데이터

      • 중복 요청이나 재고관리

    • 캐시는 만료시간을 두어 갱신하거나 데이터 갱신 시 캐시 또한 갱신되도록 한다


  • Redis

    • NoSQL(key-value) 기반의 비관계형 데이터베이스

    • 인메모리 - 메모리에서 데이터를 처리함으로 속도가 빠르다

    • 캐시 서버로 주로 사용

    • 데이터 구조

      • string, hash, list, set, sorted set 등

 

  • spring data redis

    • spring boot starter data redis 모듈 의존

    • redis server(로컬 또는 embeded redis server)

 

  • spring data redis 데이터 처리

    • 데이터 저장 

      • @Cacheable(name = "item")

        • name + 파라미터를 키로 하여 return 값을 저장

      • RedisTemplate

        • redisTemplate.opsForValue().set(키, 값)

      • RedisRepository

        • CRUD Repository 상속

        • redisRepository.save(엔티티)

        • Redis 엔티티 - @RedisHash의 값 + @Id 필드 값을 키로 사용

    • 데이터 조회

      • RedisTemplate

        • redisTemplate.opsForValue().get(키)

      • RedisRepository

        • redisRepository.findById(키)

    • 데이터 삭제

      • @CacheEvict(name = "item")

      • RedisTemplate

        • redisTemplate.opsForValue().delete(키)

      • RedisRepository

        • remove

 

  • Redis connection reset by peer 에러 - 커넥션이 많이 쌓여서 발생하는 에러

    • tcp_keepalive

      • 클라이언트가 응답 없을 시 커넥션을 제거한다

      • 해당 설정을 통해 끊어진 연결을 제거하여 커넥션이 쌓이는 것을 방지한다

    • timeout

      • 연결된 클라이언트의 idle 대기시간 설정

      • 해당 시간동안 송수신이 발생하지 않으면 연결을 끊는다.

      • 0으로 설정하면 사용하지 않고 계속해서 연결을 유지한다.

    • 클라이언트가 작업을 하지 않아도 연결을 끊지 않도록 timeout을 0으로 설정하고,
      tcp-keepalive 시간마다 클라이언트를 확인해서 응답이 없으면 커넥션을 끊는다

    • 정리

      • timeout : 연결 유지 기간 설정

      • tcp keepalive : 클라이언트 응답 없는지 주기적으로 확인하여 연결 끊음

 

  • Redis-cli

    • get/set

    • flushall

 

 

댓글을 작성해보세요.

채널톡 아이콘