봉봉의 개인 블로그
2017-11-02(Spring Boot에서 Redis 설정및 사용하여 방문자수 업데이트 만들기) 본문
Spring에서 Redis 설정
Spring(boot)에서 Redis를 설정하는 것은 무척 간단하다. Redis를 이용해서 간단하게 Page 방문자수를 업데이트 해주는것을 만들어보자.
메이븐에서 먼저 관련 라이브러리 추가하기
1 2 3 4 5 6 7 8 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> | cs |
application.yml에 Redis url,port 등을 입력하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | server: port: 8080 spring: profiles: active: - local mvc: view: prefix: /WEB-INF/views/ suffix: .jsp redis: host: 127.0.0.1 port: 6379 | cs |
설정은 이것으로 끝났다. 이제 Spring 에서 Redis 읽어올 Java Config를 만든다.
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 | import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { private @Value("${spring.redis.host}") String redisHost; private @Value("${spring.redis.port}") int redisPort; @Bean public JedisConnectionFactory connectionFactory() { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(redisHost); jedisConnectionFactory.setPort(redisPort); jedisConnectionFactory.setUsePool(true); return jedisConnectionFactory; } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(connectionFactory()); return redisTemplate; } } | cs |
jedisConnectionFactory 를 통해서 Redis 커넥션을 관리해준다.
RedisTemplate를 이용해서 실제 Redis 를 Spring에서 사용하는데 중요한 것은 SetKeySerializer(), SetValueSerializer() 메소드들이다. 이 메소드를 빠트리면 실제 Spring에서 조회할 때는 값이 정상으로 보이지만 redis-cli 로 보면 key 값에 \xac\xed...........이런 값들이 붙는다
이제 Redis를 사용하는 Service를 만들어보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import javax.annotation.Resource; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; @Service public class RedisService { @Resource(name = "redisTemplate") private ValueOperations<String, String> valusOps; public Long getVisitCount() { Long count = 0L; try { valusOps.increment("spring:redis:visitcount", 1); count = Long.valueOf(valusOps.get("spring:redis:visitcount")); } catch (Exception e) { System.out.println(e.toString()); } return count; } } | cs |
RedisTemplate에서 필요한 타입을 가져오면 된다. Redis 숫자 증가를 처리할 수 있는 incr를 사용하기 위해서 ValueOperations를 이용한다. 이렇게 각각 Redis에 대응 되는 Type이나 Method를 RestTemplate 레퍼런스에서 쓰고 그에 관련된 Method를 만들면 편하게 사용할 수 있다.
이제 Controller에서 가져다 쓰면된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Controller public class HomeController { @Autowired private RedisService redisService; @RequestMapping(value = "/", method = RequestMethod.GET) public ModelAndView index() { ModelAndView model = new ModelAndView("index"); model.addObject("count", redisService.getVisitCount()); return model; } } | cs |
이제 Page에 접근할때마다 방문자수가 증가한다.
[느낀점]
이글을 읽고 다시 쓰면서 느낀점은 Redis를 Spring(boot)에서 사용하기 위해선 Spring에서의 Redis 설정이 필요하고 팀프로젝트에서 햇던 메이븐 프로젝트와 같이 pom.xml 같은 파일에 라이브러리를 추가해주는 설정을 해주어야하고 application.yml에 대해선 좀더 조사해 봐야한다는 것을 느낌.
그리고 Redis를 사용하기 위해선 @Resource(어노테이션)이 필요하게 되며 미리 설정한 RedisTemplate를 통해서 주입받는다고 생각하면 될꺼같다.(확실치는 않음)
또한 setKeySerializer(),setValueSerializer() 등과 같은 Method를 사용한다고 하였는데 이러한 Method들 말고 다른 Method 같은 것들은 없는지 알아볼 필요성을 느끼고 redis-cli이라는 것이 무엇인지 알아야 할듯함.
RedisTemplate 사용시 5가지의 타입에서 필요한 type을 가지고 와서 사용하면 된다.
*key-value 값이 중요*
'입사후 공부한내용' 카테고리의 다른 글
2017-11-06(Javascript : window.open 속성 사용 방법) (0) | 2017.11.06 |
---|---|
2017-11-03(엑셀 poi read 관련) (0) | 2017.11.03 |
2017-11-03(엑셀 poi write 관련) (0) | 2017.11.03 |
2017-11-03(ACS란 무엇인가) (0) | 2017.11.03 |
2017-11-02(Redis) (0) | 2017.11.02 |
Comments