Springboot + Redis 연동

배세훈·2022년 7월 26일
0

SpringBoot

목록 보기
3/4

1. 설정

build.gradle

plugins {
    id 'org.springframework.boot' version '2.7.2'
    id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    id 'java'
}

group = 'com.redis'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-redis' // redis를 사용하기 위한 추가
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.session:spring-session-data-redis' // redis Session을 위한 추가
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

application.yml

spring:
  redis:
    host: localhost
    port: 6379

Springboot 2.0 이하는 아래 설정 추가

package com.example.redisserver.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory(){
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
        return lettuceConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());

        return redisTemplate;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate(){
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setKeySerializer(new StringRedisSerializer());
        stringRedisTemplate.setValueSerializer(new StringRedisSerializer());
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory());

        return stringRedisTemplate;
    }

}

Springboot Redis Session 설정

  • Application 쪽에 @EnableRedisHttpSession 어노테이션 추가
@EnableRedisHttpSession
@SpringBootApplication
public class RedisServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedisServerApplication.class, args);
    }

}

2. Redis 연동 코드 작성

Controller

package com.redis.redisclient.controller;

import com.redis.redisclient.service.RedisSampleService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/redis")
public class RedisSampleController {

    private final RedisSampleService redisSampleService;


    public RedisSampleController(RedisSampleService redisSampleService) {
        this.redisSampleService = redisSampleService;
    }

    @GetMapping("/session")
    public String getSessionId(HttpSession session){
        return session.getId();
    }

    @GetMapping
    public void getRedisStringValue(String key){
        redisSampleService.getRedisStringValue(key);
    }

    @PostMapping
    public void setRedisStringValue(String key, String value){
        redisSampleService.setRedisStringValue(key, value);
    }
}

Service

package com.redis.redisclient.service;

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

@Service
public class RedisSampleService {

    private final StringRedisTemplate stringRedisTemplate;

    public RedisSampleService(StringRedisTemplate stringRedisTemplate) {
        this.stringRedisTemplate = stringRedisTemplate;
    }

    public void getRedisStringValue(String key){
        ValueOperations<String ,String> stringStringValueOperations = stringRedisTemplate.opsForValue();
        System.out.println("Redis key : " + key);
        System.out.println("Redis value : " + stringStringValueOperations.get(key));
    }

    public void setRedisStringValue(String key, String value){
        ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();
        stringStringValueOperations.set(key, value);
        System.out.println("Redis key: " + key);
        System.out.println("Redis value: " + stringStringValueOperations.get(key));
    }

}
profile
성장형 인간

0개의 댓글