Spring Framework의 spring data redis이용하기

jedis, jredis, ... 등의 redis client 라이브러리만을 추가해 사용하는 것과,

spring에서 제공하는 RedisTemplate을 함께 사용하는 방법이 있다.


RedisTemplate을 사용하면 redis client 라이브러리의 종류에 상관없이 사용할 수 있어 좋고,

redis가 지원하는 자료구조를 사용하기 좋게 랩핑을 해놓아 좋다.

jedis를 그냥 써도 좋지만, byte[] 타입으로 컨버팅 노가다를 해야 한다.

어려운 길을 가지말고 RedisTemplate을 사용하기로 해보자.


pom.xml에 추가

jedis 버전 정보 확인

<!-- jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.2.1</version> </dependency> <!-- spring data redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.2.0.RELEASE</version> </dependency>


root-context.xml에 추가

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" > <!-- Root Context: defines shared resources visible to all other web components --> <mvc:annotation-driven conversion-service="conversionService" /> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true" p:host-name="172.20.44.209" p:port="6379" /> <!-- redis template definition --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnectionFactory" /> </beans>

다양하게 사용해 보자

1. 가장 쉽게 사용해 보기

사용할 타입을 RedisTemplate과 자료구조에 지정하여 사용

/** * Handles requests for the application home page. */ @Controller @RequestMapping(value="/home") public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Autowired RedisTemplate<String, String> redisTemplate; @Resource(name="redisTemplate") private ValueOperations<String, String> valueOps; @RequestMapping(value="/jedis2") public String jedis2(){ valueOps.set("foo", "bar"); logger.info("Welcome jedis user {}.",valueOps.get("foo")); return "home"; } }


2. Custom class 이용해 보기

Serializable 를 구현한 User class를 넣어보자

public class User implements Serializable { @NotNull String name; @Min(0) @Max(100) int id; Level level; public void setLevel(Level _level) { level = _level; } public Level getLevel() { return level; } public void setId(int _id) { id = _id; } public int getId() { return id; } public void setName(String _name) { name = _name; } public String getName() { return name; } } /** * Handles requests for the application home page. */ @Controller @RequestMapping(value="/home") public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Autowired RedisTemplate<String, User> redisTemplate; @Resource(name="redisTemplate") private ValueOperations<String, User> valueOps; @RequestMapping(value="/jedis2") public String jedis2(){ User user = new User(); user.setId(4); user.setName("warwick"); user.setLevel(Level.GOLD); valueOps.set("foo", user); return "home"; } @RequestMapping(value="/jedis3") public String jedis3(){ User savedUser = valueOps.get("foo"); logger.info("Welcome jedis user " + savedUser.id + " name : " + savedUser.name + " level : " + savedUser.level); return "home"; } }

결과

INFO : com.yakolla.mvctest.HomeController - Welcome jedis user 4 name : warwick level : GOLD


3. valueOperations 없이 사용해보기

public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Autowired RedisTemplate<String, Object> redisTemplate; @RequestMapping(value="/jedis2") public String jedis2(){ User user = new User(); user.setId(6); user.setName("warwick2"); user.setLevel(Level.SILVER); redisTemplate.opsForValue().set("foo", user); return "home"; } @RequestMapping(value="/jedis3") public String jedis3(){ User savedUser = (User)redisTemplate.opsForValue().get("foo"); logger.info("Welcome jedis user " + savedUser.id + " name : " + savedUser.name + " level : " + savedUser.level); return "home"; } }

결과

INFO : com.yakolla.mvctest.HomeController - Welcome jedis user 6 name : warwick2 level : SILVER