블로그

Redis와 캐시 서버

Redis란인메모리 데이터베이스로, 키-값 형태의 데이터 구조를 가지고 있다.인메로리 데이터베이스이기 때문에 디스크 입출력 없이 속도가 빠르다.휘발성을 지니고 있다.키-값 형태의 데이터 구조를 갖고 있기 때문에 유연한 데이터 관리가 가능하다. 캐시 서버나 트래픽을 분산을 위해 사용된다.  Redis 구동다음 명령어로 redis가 설치된 위치에서 redis 서버를 구동시킨다.redis-server다음 명령어로 redis 클라이언트에 접속이 가능하다.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도 가능하다.  

CacheRedis

Redis와 캐시서버

캐시(cache)자주 사용하는 데이터나 값을 복사해두어 사용 비용을 절감자주 변경하지 않는 데이터 또는 자주 조회하는 데이터를 캐시에 두고 사용한다이미지나 이벤트 정보일시적으로 필요한 데이터, DB에서 관리할 필요가 없지만 서비스에서 사용하는 데이터중복 요청이나 재고관리캐시는 만료시간을 두어 갱신하거나 데이터 갱신 시 캐시 또한 갱신되도록 한다RedisNoSQL(key-value) 기반의 비관계형 데이터베이스인메모리 - 메모리에서 데이터를 처리함으로 속도가 빠르다캐시 서버로 주로 사용데이터 구조string, hash, list, set, sorted set 등 spring data redisspring boot starter data redis 모듈 의존redis server(로컬 또는 embeded redis server) spring data redis 데이터 처리데이터 저장 @Cacheable(name = "item")name + 파라미터를 키로 하여 return 값을 저장RedisTemplateredisTemplate.opsForValue().set(키, 값)RedisRepositoryCRUD Repository 상속redisRepository.save(엔티티)Redis 엔티티 - @RedisHash의 값 + @Id 필드 값을 키로 사용데이터 조회RedisTemplateredisTemplate.opsForValue().get(키)RedisRepositoryredisRepository.findById(키)데이터 삭제@CacheEvict(name = "item")RedisTemplateredisTemplate.opsForValue().delete(키)RedisRepositoryremove Redis connection reset by peer 에러 - 커넥션이 많이 쌓여서 발생하는 에러tcp_keepalive클라이언트가 응답 없을 시 커넥션을 제거한다해당 설정을 통해 끊어진 연결을 제거하여 커넥션이 쌓이는 것을 방지한다timeout연결된 클라이언트의 idle 대기시간 설정해당 시간동안 송수신이 발생하지 않으면 연결을 끊는다.0으로 설정하면 사용하지 않고 계속해서 연결을 유지한다.클라이언트가 작업을 하지 않아도 연결을 끊지 않도록 timeout을 0으로 설정하고,tcp-keepalive 시간마다 클라이언트를 확인해서 응답이 없으면 커넥션을 끊는다정리timeout : 연결 유지 기간 설정tcp keepalive : 클라이언트 응답 없는지 주기적으로 확인하여 연결 끊음 Redis-cliget/setflushall  

RedisCache

채널톡 아이콘