Database/Redis

Redis] ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ •

littlezero48 2023. 1. 27. 10:49

๐Ÿ“Œ ์‚ฌ์šฉ ๊ณ„๊ธฐ

Redis ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ •์„ ์‚ฌ์šฉํ•ด์„œ ์ €์žฅํ•ด ๋†“์€ reflesh token์„ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์‹œ๋กœ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌ

 

๐Ÿ“๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•œ Redis Configuration

@EnableRedisRepositories
@Configuration
public class RedisConfig {

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

    @Bean
    public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

 

 

๐Ÿ“Œ 1) Redis Template Set ์„ค์ • ๋ฐฉ๋ฒ•

: Strings (๊ธฐ๋ณธ์ ์ธ key-value)์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜๋ฉฐ, ์ €์žฅํ•˜๋Š” ์˜คํผ๋ ˆ์ด์…˜ ์‹คํ–‰์‹œ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•. 

 

๐Ÿ“์ €์žฅ ๊ฐ์ฒด

@RedisHash(value = "redis")
public class RedisTemplateEntity {
    private String email;
    private String testText;
}

 

๐Ÿ“Repository

@Repository
@RequiredArgsConstructor
public class RedisTemplateRepository {
    private final RedisTemplate<String, String> redisTemplate;
    private long expireTime = 60;

    public String saveValue (String email, String testText) {
    	// Point!TimeUnit์„ ํ†ตํ•ด ๋งŒ๋ฃŒ์‹œ๊ฐ„ ๋‹จ์œ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
        redisTemplate.opsForValue().set(email, testText, expireTime, TimeUnit.MINUTES);
        return redisTemplate.opsForValue().get(email);
    }

    public void deleteValue (String email) {
        redisTemplate.delete(email);
    }
}

 

๐Ÿ“์‚ฌ์šฉ

// ์‚ฌ์šฉ ํ…Œ์ŠคํŠธ๋งŒ์„ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ผ ์„œ๋น„์Šค๋กœ ๋‚˜๋ˆ„์ง€ ์•Š์Œ
@RestController
@RequiredArgsConstructor
public class RedisTemplateController {

    private final RedisTemplateRepository redisTemplateRepository;

    // ์ €์žฅ
    @PostMapping("/testValue")
    public String saveTestValue (@RequestBody RedisTemplateDto redisTemplateDto){
        return redisTemplateRepository.saveValue(redisTemplateDto.getEmail(), redisTemplateDto.getTestText());
    }

    // ์ˆ˜์ • : Redis๋Š” ๊ฐ™์€ key๊ฐ’์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฒŒ๋˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ์œ„์— ๋ฎ์–ด์“ฐ๊ฒŒ๋จ. ๊ทธ๋ž˜์„œ save๋‚˜ update๋‚˜ ๋ฐฉ์‹์ด ๋™์ผ
    @PostMapping("/testValue/{email}")
    public String updateTestValue (@RequestParam String email, @RequestBody RedisTemplateDto redisTemplateDto){
        return redisTemplateRepository.saveValue(email, redisTemplateDto.getTestText());
    }

    // ์‚ญ์ œ
    @DeleteMapping("/testValue/{email}")
    public void deleteTestValue (@RequestParam String email) {
        redisTemplateRepository.deleteValue(email);
    }
}

 

 

๐Ÿ“Œ 2) Crud Repository ์„ค์ • ๋ฐฉ๋ฒ•

: ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด ์ž์ฒด์— ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•. ๊ฐ์ฒด @RedisHash ์–ด๋…ธํ…Œ์ด์…˜์— timeToLive ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์„ค์ •

 

๐Ÿ“์ €์žฅ ๊ฐ์ฒด

@Getter
@RedisHash(value = "REDIS_USE", timeToLive = 5*60L) // Point! ๊ธฐ๋ณธ ์ดˆ๋‹จ์œ„
public class RedisCrudUseEntity {
    @Id
    private Long id;
    private String testText;

    @Builder
    public RedisCrudUseEntity(Long id, String testText) {
        this.id = id;
        this.testText = testText;
    }
}

 

๐Ÿ“Repository

@Repository
public interface RedisCrudUseRepository extends CrudRepository<RedisCrudUseEntity, Long> {
}

 

๐Ÿ“์‚ฌ์šฉ

// ์‚ฌ์šฉ ํ…Œ์ŠคํŠธ๋งŒ์„ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ผ ์„œ๋น„์Šค๋กœ ๋‚˜๋ˆ„์ง€ ์•Š์Œ
@RestController
@RequiredArgsConstructor
public class RedisCrudUseController {
    private final RedisCrudUseRepository redisCrudUseRepository;

    // ์ €์žฅ
    @PostMapping("/redisCrudUse")
    public void saveRedisCrudUse (@RequestBody RedisCrudUseDto redisCrudUseDto) {
        RedisCrudUseEntity redisCrudUseEntity = RedisCrudUseEntity.builder()
            .id(redisCrudUseDto.getId())
            .testText(redisCrudUseDto.getTestText())
            .build();
        redisCrudUseRepository.save(redisCrudUseEntity);
    }

    // ์ˆ˜์ • : Redis๋Š” ๊ฐ™์€ key๊ฐ’์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฒŒ๋˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ์œ„์— ๋ฎ์–ด์“ฐ๊ฒŒ๋จ. ๊ทธ๋ž˜์„œ save๋‚˜ update๋‚˜ ๋ฐฉ์‹์ด ๋™์ผ
    @PostMapping("/redisCrudUse/{id}")
    public void updateRedisCrudUse (@PathVariable Long id, @RequestBody RedisCrudUseDto redisCrudUseDto) {

        RedisCrudUseEntity redisCrudUseEntity = RedisCrudUseEntity.builder()
                .id(id)
                .testText(redisCrudUseDto.getTestText())
                .build();
        redisCrudUseRepository.save(redisCrudUseEntity);
    }

    // ์‚ญ์ œ
    @DeleteMapping("/redisCrudUse/{id}")
    public void deleteRedisCrudUse (@PathVariable Long id) {

        redisCrudUseRepository.deleteById(id);
    }
}

 


โž• ์‹ค์Šต ๋ ˆํฌ์ง€ํ† ๋ฆฌ

 

GitHub - littlezero48/Study-TIL: Tody I learned

Tody I learned. Contribute to littlezero48/Study-TIL development by creating an account on GitHub.

github.com