Redis Stack 1편에 이어 설치 및 기본적인 Configuration에서 대해서 살펴보겠습니다.

https://yonguri.tistory.com/147

 

Redis Stack #1 - 소개 (feat. Redis OM Spring)

Redis Stack Redis Stack 이 나온지는 꽤 되었지만, 그 유용함과 확장의 성격에 비해 아직까지는 공유된 사례가 많지 않아 간략히 개요정도의 수준으로 소개해 봅니다. 개인적으로 Redis라는 기술 자체

yonguri.tistory.com

 

Redis Stack Install & Run

  • 설치방법은 여러가지가 있으나 개발 및 버전관리 편의성을 위해 Docker 기반의 설치방법만 다루겠습니다.
  • Docker 기반의 Redis Stack 컨테이너는 두가지 유형으로 제공합니다.
    • redis/redis-stack
    • redis/redis-stack-server
  • redis-stack에는 Redis Stack 서버와 GUI기반의 클라이언트 툴인 RedisInsight가 모두 포함되어 있습니다. 따라서 이 컨테이너는 내장된 RedisInsight를 사용하여 데이터를 시각화할 수 있으므로 로컬 개발에 가장 적합합니다.
  • redis-stack-server는 Redis Stack 서버만 제공합니다. 이 컨테이너는 일반적인 프로덕션 배포에 가장 적합합니다.

일반적으로는 개발시에는  redis-stack으로 설치해서 사용하면 되겠습니다.

 

설치 및 구동방법은 아래의 명령어 라인 한 줄로 간단하게 실행 가능합니다.

docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest

포트는 redis-server의 기본포트인 6379와 redisInsight의 웹사이트 기본포트인 8001을 그대로 사용하도록 설정하였는데, 물론 다른 포트로 매핑해서 사용할 수 있습니다.

  

물론  일반적인 Redis 인스턴스에 연결할 때와 마찬가지로 redis-cli를 사용하여 서버에 연결할 수 있습니다.
redis-cli가 로컬에 설치되어 있지 않은 경우, Docker 컨테이너에서 실행할 수 있습니다:

$ docker exec -it redis-stack redis-cli

 

 

Run Redis Stack on Docker

How to install Redis Stack using Docker

redis.io

 

 

Redis Stack Configuration

Persistence 설정

  • Redis 데이터를 별도로 로컬에 저장할 수 있는데 -v옵션을 통해 저장할 로컬 볼륨(디렉토리)를 지정할 수 있습니다. 아래의 명령어는  Redis에 생성되는 모든 데이터를 로컬 디렉터리 local-path에 저장하게 됩니다. Redis내부적으로 데이타가 저장되는 위치는 /DATA입니다.
    •  -v [저장할 로컬경로]:/DATA
$ docker run -v /local-path/:/DATA redis/redis-stack:latest

Ports 포워딩

  • 다른 포트로 Redis Stack 서버 또는 RedisInsight를 접급하려면 -p 옵션의 왼쪽 부분을 변경하면 됩니다. 아래의 명령은 포트 10001에 Redis Stack 서버를, 포트 13333에 RedisInsight를 지정하도록 설정한 상태입니다.
    • 기본값: Redis - 6379, RedisInsight - 8001
    • -p [기존포트]:[변경포트]
$ docker run -p 10001:6379 -p 13333:8001 redis/redis-stack:latest

Config files 설정

  • 기본적으로 Redis Stack 컨테이너는 Redis와 마찬가지로 Redis의 내부 구성 파일(redis-stack.conf)을 사용합니다.  이 또한 -v옵션을 사용하여 별도의 커스터마이징한 로컬 구성 파일로 Redsi Stack을 실행시킬 수 있습니다.
$ docker run -v /local-redis-stack.conf:/redis-stack.conf -p 6379:6379 -p 8001:8001 redis/redis-stack:latest

 

Redis Stack 영속성  및 커스텀 환경 설정

사실 Redis의 사상으로 보면 영속성 기반의 데이타 관리는 백업용을 위한 최소한의 용도도 사용하는 것이 적합할 것입니다. 또한 아래에 소개하는 영속성 모드의 설정값을 잘못 사용하는 경우, Redis Core의 퍼포먼스에 영향을 주게 됩니다.

때문에 대량의 트랜잭션과 I/O가 발생하는 서비스에서 실시간성 데이타를 다루기 위한 용도로 Redis를 사용하는 경우애는 아래의 옵션을 제대로 설정해서 사용해야 합니다.

 

Redis를 완전한 영속성을 띈 스토리지 목적으로 사용하기 위해 아래의 옵션을 사용하는 것은 권장하지 않습니다.

그런 목적이라면 범용 RDBMS나  또는 파일기반(HDFS)의 Kafka와 같은 서비스를 검토하는것을 추천합니다.

 

Redis로 이런 방법으로 데이타의 영속성 보장이 가능하다 정도로만 참고하시면 좋을것 같습니다.

 

1. 우선 Redis 데이타가 저장될  로컬 저장경로와 파일를 설정합니다. 위의 Persistance 설명을 참고하시면 됩니다.

  1. 컨테이너의  마운트 폴더는 DATA로 지정합니다.
  2. Redis에 데이타가 생성되면 아래의 환경설정에 따라 지정된 로컬 파일에 데이타가 저장됩니다. 
  3. 도커가 구동될때 해당 로컬경로의 파일을 읽어들여 Redis에 로딩합니다. 

2. 데이타 저장방식을 지정할 커스텀 설정파일을 구성합니다. 

  1. 로컬에 환경설정 파일 생성하고 위의 Config file 설정 설명처럼 마운트 옵션(-v)를 사용하여 컨테이너 구성시 마운트를 시켜주면 됩니다. 
  2. ex) /path/to/redis-stack.conf


아래는 Redis Stack의 환경설정파일의 항목 중 영속성 모드에 관련된 일부 항목들 입니다.

save 300 1
dbfilename redis-dump.rdb
dir /data
appendonly no
 
  • save 300 1
    • save [초] [변경Key수] - 300초동안 1개 이상의 Key에 대한 변동이 일어난 경우 데이타가 저장되도록 설정한 상태입니다.
    • save 옵션에 따라 저장(동기화)주기가 변하기 때문에,  주기를 짦게 할수록 Redis의 부하는 당연히 증가하면 
      위에서 언급한대로 이런 옵션들의 설정을 잘못한 경우, Redis 성능에 심각한 성능저하 및 부하를 발생시킬 수 있습니다.
  • dbfilename redis-dump.rdb
  • dir /data 
    • Redis 데이타가 저장될 파일이며 영속성 모드의 형태로 사용할 경우, 즉 데이타 파일을 별도의 로컬경로의 외부파일로 설정해서 마운트한 경우에는  Redis가 구동될때 해당파일이 마운트 되면서 파일은 내용이 로드됩니다.
  • appendonly no
    • 데이타 저장시 rdb파일 저장방식만 사용하겠다는 의미입니다. yes로 할 경우,  AOF방식을 사용하게 됩니다.


데이타 저장관련 속성들에 대한 자세한 정보는 아래 링크를 참조하면 좋을것 같습니다.

https://hoooon-s.tistory.com/25

 

[Redis] AOF vs RDB - Redis 메모리 관리 방식 비교

# RDB (Redis Database) 특정 시점(snapshot)의 메모리에 있는 데이터 전체를 바이너리 파일로 저장한다. AOF 파일보다 사이즈가 작다. 따라서 로딩 속도가 AOF 보다 빠르다. 저장 시점은 redis.conf의 save 파라

hoooon-s.tistory.com

 

 

위의 내용을 정리하면,
아래의 명령어로 영속성 데이타 저장에 필요한 구성으로 Redis-Stack(Redis)를 구동할 수 있습니다.

 

$ docker run -v /path/to/redis-stack.conf:/redis-stack.conf -v /path/to:/DATA -p 6379:6379 -p 8001:8001 redis/redis-stack:latest

 

  • -v /path/to/redis-stack.conf:/redis-stack.conf
    • redis-stack.conf - 로컬에서 생성/설정한 conf 파일 (/path/to/redis-stack.conf)이
      도커 컨테이너로 마운트 됨 
  • -v /path/to:/DATA
    • Redis 데이타가 로컬경로(/path/to) 에 저장되고, 구동시 해당 파일의 데이타가 로드됨
    • 저장되는 파일은 설정파일에서 설정한 'dbfilename redis-dump.rdb' 의 파일명으로 저장됨

 

고려사항

  • 캐시의 목적보다 DB(영속성 데이타의 보관)의 목적이 높고 성능에 크리티컬한 서비스가 아닐 경우에만 사용고려
  • RDB 와 AOF방식을 같이 쓰게되면 실시간 동기화가 가능하나, 서버에 많은 부하를 발생
  • 적절한 SAVE 옵션 활용 필요

 

Redis 환경 설정  확인


redis cli 에서 info server 명령어로 현재 Redis Server의 환경구성 정보를 확인할 수 있습니다.

> info server


# Server
redis_version:6.2.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:adcdff4a0d295794
redis_mode:standalone
os:Linux 5.10.124-linuxkit x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:epoll
atomicvar_api:c11-builtin
gcc_version:9.4.0
process_id:9
process_supervised:no
run_id:8736ea715dc5983131b4d201d69523bc8fa00127
tcp_port:6379
server_time_usec:1664763230283469
uptime_in_seconds:85
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:3818846
executable:/opt/redis-stack/bin/redis-server
config_file:/redis-stack.conf
io_threads_active:0


또는 config 명령어로 특정 환경설정 항목에 대한 설정값 확인이 가능하다.

> config get dir


1) "dir"
2) "/data"

설정파일을 검색(get)해서 dir 속성에 대한 정보만 보여줍니다.

 

> config get save

1) "save"
2) "300 1"



> config get dbfilename

1) "dbfilename"
2) "redis-dump.rdb"

 

영속성 관련한 속성값을 위와 같이 config get [속성명]으로 확인 할 수 있습니다.

 

Redis Insight 

사실 Redis를 사용하면서 Medis와 같은 일부 유료 툴을 제외하면 사용할 만한 클라이언트 툴이 거의 없었는데, Redis-Stack이 출시되면서 꽤 괜찮은 공식 클라이언트 툴이 나왔습니다.

 

물론, 위에서 설명한대로  Redis-Server를 설치하면 별도의 클라이언트 툴 설치 필요없이 웹브라우저로 접속하여 동일한 수준으로 사용이 가능합니다.

 

별도의 클라이언트를 설치하려면 아래의 주소로 가서 다운받아 설치하면 됩니다.

https://redis.io/docs/ui/insight/

 

RedisInsight

Visualize and optimize Redis data

redis.io

 

기존 유료 툴과 비교해도 크게 불편하지 않는 수준의 기능과 인터페이스를 제공하고 있기 때문에 Redis 기반 개발에 많은 도움이 될 것 같습니다.

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기