1. Redis 서버는 있다고 가정.
2.  build.gradle 에 의존성 추가.

1
2
// redis 접속
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
cs

3. application.yml Redis 정보 설정 
     - 현재 단독 구성
     - sentinel, cluster로도 구성 가능

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
spring:
  # Redis
  redis:
    database: 0
  # 단독구성 접속설정  
    host: 127.0.0.1
    password: 
    port: 6379
  # sentinel구성 접속설정
#    sentinel: 
#      master: springboot
#      nodes:
#        - 127.0.0.1:16379
#        - 127.0.0.1:16380
#        - 127.0.0.1:16381
  # cluster구성 접속설정
    cluster:
      nodes: #
#        - 10.123.1.88:16400
#        - 10.123.1.88:16401
#        - 10.123.1.88:16402
#    lettuce:
#      pool:
#        max-active: 8 #Maximum number of connections
#        max-idle: 8 #Maximum Idle Connection
#        min-idle: 0 #Minimum idle connection
      #shutdown-timeout: 200ms
cs

4. RedisConfig  설정. ㅁㄴㅇㄹ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@Configuration
@EnableRedisRepositories
@RequiredArgsConstructor
public class RedisConfig {
 
    @Value("${spring.redis.host}")
    private String redisHost;
 
    @Value("${spring.redis.port}")
    private int redisPort;
 
    @Value("${app-config.config.key-profile}")
    private String keyProfile;
 
    @Value("${spring.redis.cluster.nodes}")
    @Null
    private List<String> clusterNodes;
 
    /** Redis 접속 */
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        // cluster 사용인 경우
        if( keyProfile.equals("clusterNodes")) {
            RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(clusterNodes);
            return new LettuceConnectionFactory(redisClusterConfiguration);
        } else {
            // 
            return new LettuceConnectionFactory(redisHost, redisPort);
        }
    }
 
    /** redisTemplate */
    @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;
    }
 
}
cs


5. Redis 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
private final RedisTemplate<String, Object> redisTemplate;
 
// 데이터 저장 (Expire 설정)
ValueOperations<String, Object> values = redisTemplate.opsForValue();
values.set(key, value, duration);
 
// 데이터 저장 (Expire 미설정)
ValueOperations<String, Object> values = redisTemplate.opsForValue();
values.set(key, value);
 
// 데이터 조회
ValueOperations<String, Object> values = redisTemplate.opsForValue();
if (values.get(key) == null) {
    값이 없음
}
 
// 데이터 삭제
redisTemplate.delete(key);
 
// Expire 시간 재설정
redisTemplate.expire(key, timeout, TimeUnit.MILLISECONDS);
cs

끝!!! ^_^

 

 

 

 

 

 

 

 

 

 

 

 

반응형

소스는 돌아가지 않아요.. ^^ 대략적으로 이렇다~

// 파일정보 전달 Class
public class FileCommand {
    private String originalFileNm;
    private String storedFileNm;
    private Long fileSize;
    private String fileExtension;
    private byte[] fileInfo;
}

// MultipartFile 형식으로 업로드 받은 메서드
public void fileUpload(MultipartFile uploadFile) {

	FileCommand fileCommand = new FileCommand();

    // 확장자
    String fileExtension = "." + FilenameUtils.getExtension(uploadFile.getOriginalFilename());

    // 저장파일명
    String localDateTimeNow = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
    String storedFileNm = localDateTimeNow + fileExtension;
    agreeFileCommand.setOriginalFileNm(uploadFile.getOriginalFilename()); // 원본 파일명
    agreeFileCommand.setStoredFileNm(storedFileNm); // 저장파일명
    agreeFileCommand.setFileSize(uploadFile.getSize()); // 파일 사이즈
    agreeFileCommand.setFileExtension(fileExtension); // 파일 확장자
    agreeFileCommand.setFileInfo(uploadFile.getBytes()); // 파일정보

    // @PostMapping - api 호출 공통
    uploadApi(@RequestBody FileCommand command);
}


// 파일 수신 API
@PostMapping("fileSave")
public void fileSave(@RequestBody FileCommand file) {
    File file = fileSave(file.getFilePath(), file.getFileNm(), file.fileInfo() );
}


/** 파일 업로드 */
public File fileSave(String filePath, String fileNm, byte[] fileInfo) {

    // 파일업로드 처리
    File tmpFile = new File(filePath + fileNm);
    try {
        FileUtils.copyToFile(new ByteArrayInputStream(fileInfo), tmpFile);
    } catch (IOException e) {
        log.error("동의서파일 저장실패 : " + filePath + storedFileNm);
    }
    return new File(filePath + storedFileNm);
}
반응형
반응형

+ Recent posts