본문 바로가기
NoSQL/redis

[Redis 4편] spring redis 환경 세팅 및 예제

by 무대포 개발자 2022. 1. 6.
728x90
반응형

목차는 redis 목차 에 있습니다.

source 는 Github 에 있습니다.

[Redis 4편] spring redis 환경 세팅 및 예제

spring redis 환경 세팅

  • redisTemplate 으로 redis 에 접근하여 set/get 을 하는 예제입니다.
  • 이 예제는 redis 서버가 백그라운드로 동작하고 있다고 가정하고 있습니다.

build.gradle


implementation 'org.springframework.boot:spring-boot-starter-data-redis'

application.yml


spring:
  redis:
    host: localhost # redis host
    port: 6379      # redis port

RedisConfiguration

  • redisTemplate 을 사용하여 redis 연동을 할 것이기에 Bean 으로 만들어줬습니다.
  • redis client 는 Lettuce 를 사용해서 만들었습니다.
    • 예전에 Jedis 를 사용하였으나 여러가지 문제점이 있어 spring boot 2.0 부터 Lettuce 가 사용됐다고 합니다.
    • Lettuce 의 장점은 Netty 기반이기에 비동기로 처리 가능하며, 이는 성능 향상에 도움이 됩니다.
@Configuration
public class RedisConfiguration {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Bean
    public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setEnableTransactionSupport(true); // 해당 옵션이 켜져있을 경우 기존 트랜잭션에 참여할 수 있습니다. MULTI 명령어를 사용하여
        return redisTemplate;
    }

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

spring redis example

  • 아래 예제는 api 를 통해 요청받은 request 를 redis 에 저장하고, api 를 통해 redis 에 있는 데이터를 조회하는 예제입니다.
  • source 는 Github 에 있습니다.
  • Application 을 실행시키고, Redis Server 를 수행한 후, API 를 호출하면 됩니다.

api


    @GetMapping("/api/v1/members/{id}")
    public ResponseEntity<?> getMembersUsingRedis(@PathVariable("id") String id) {
        return ResponseEntity.ok(memberService.getMembersUsingRedis(id));
    }

    @PostMapping("/api/v1/members")
    public ResponseEntity<?> saveMemberUsingRedis(@RequestBody MemberDto memberDto) {
        memberService.saveMemberUsingRedis(memberDto);
        return ResponseEntity.ok().build();
    }

service


   @Override
    public MemberDto getMembersUsingRedis(String id) {
        HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();
        Map<String, Object> result = hashOperations.entries(RedisConst.REDIS_MEMBER_KEY_PREFIX + id);
        return MemberDto.of(result);
    }

    @Override
    public void saveMemberUsingRedis(MemberDto request) {
        HashOperations<String, Object, Object> hashOperations =
                redisTemplate.opsForHash();
        hashOperations.put(RedisConst.REDIS_MEMBER_KEY_PREFIX + request.getId(), "name", request.getName());
    }

redis server 명령어 모니터링

  • terminal 에서 아래 명령어를 수행하면 redis-server 들어오는 입력 명령어를 살펴볼 수 있습니다.
  • 6379 는 redis server 의 port 입니다.
    redis-cli -p 6379 monitor

결론

  • spring redis 환경 세팅 및 예제에 대해서 간단히 정리했습니다.

reference

댓글