Redis] ๋ง๋ฃ ์๊ฐ ์ค์
๐ ์ฌ์ฉ ๊ณ๊ธฐ
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