1 분 소요

1. redis image 다운로드

docker pull redis:alpine

alpine 은 태그를 의미하며 redis의 버전 등의 값을 줄수 있다.
이를 생략하면 latest를 받는데, alpine 태그의 특징은 이미지를 경량화 시켜서 용량이 작다는 것이다.

2. docker-compose.yml 작성

version: "3.8"

services:
  db-mysql:
    container_name: naem_database
    image: mysql
    platform: linux/amd64
    env_file: ./.env
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
      - MYSQL_DATABASE=$MYSQLDB_DATABASE
    ports:
      - ${MYSQLDB_LOCAL_PORT}:${MYSQLDB_DOCKER_PORT}
    volumes:
      - ./docker-data/mysql:/var/lib/mysql
    networks:
      - springboot-mysql-net

  redis-docker:
    image: redis:alpine
    command: redis-server --port ${REDIS_LOCAL_PORT}
    container_name: "docker-redis"
    volumes:
      - ./docker-data/redis:/data
    labels:
      - "name=redis"
      - "mode=standalone"
    ports:
      - ${REDIS_LOCAL_PORT}:${REDIS_DOCKER_PORT}

  application:
    container_name: naem_application
    build:
      context: ./
      dockerfile: Dockerfile
    env_file: ./.env
    ports:
      - ${SPRING_LOCAL_PORT}:${SPRING_DOCKER_PORT}
    environment:
      SPRING_APPLICATION_JSON: '{
          "spring.datasource.url"  : "jdbc:mysql://localhost:$MYSQLDB_DOCKER_PORT/$MYSQLDB_DATABASE?serverTimezone=UTC&characterEncoding=UTF-8",
          "spring.datasource.username" : "$MYSQLDB_USER",
          "spring.datasource.password" : "$MYSQLDB_ROOT_PASSWORD",
          "spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL8Dialect",
          "spring.jpa.hibernate.ddl-auto" : "create"
        }'
    depends_on:
      - db-mysql
    networks:
      - springboot-mysql-net

networks:
  springboot-mysql-net:
    driver: bridge

.env

REDIS_LOCAL_PORT=6379
REDIS_DOCKER_PORT=6379

3. redis-cli 사용

우선, docker-compose up -d을 실행해준다.
그리고, 컨테이너에 접속하여 redis 커맨드 라인 명령어 도구인 redis-cli를 이용해보자.

>> docker exec -it [컨테이너명] redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SET abc 123
OK
127.0.0.1:6379> GET abc
"123"
127.0.0.1:6379> 

예시: docker exec -it docker-redis redis-cli
(종료는 docker-compose stop으로 하고, 삭제까지 하고 싶으면 docker-compose down을 하면 된다.)

4. application.yml 설정

spring:
  cache:
    type: redis
    redis:
      cache-null-values: true

5. RedisConfig.java 작성

@Configuration
public class RedisConfig {

    @Autowired
    private SecretYamlRead secretYamlRead;

    String host = secretYamlRead.getHost();
    int port = Integer.parseInt(secretYamlRead.getPort());

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(host, port);
    }

    @Bean
    public RedisTemplate<?, ?> redisTemplate() {
        RedisTemplate<?, ?> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }
}

나는 application.yml과 별도로 secret.yml 파일에 따로 환경변수 정보를 작성했기 때문에,
secretYamlRead을 통해 환경변수 값을 가져온다.
이 내용에 대해서는 이 글을 참고하자.

Ref.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: