jedis, jredis, ... 등의 redis client 라이브러리만을 추가해 사용하는 것과,
spring에서 제공하는 RedisTemplate을 함께 사용하는 방법이 있다.
RedisTemplate을 사용하면 redis client 라이브러리의 종류에 상관없이 사용할 수 있어 좋고,
redis가 지원하는 자료구조를 사용하기 좋게 랩핑을 해놓아 좋다.
jedis를 그냥 써도 좋지만, byte[] 타입으로 컨버팅 노가다를 해야 한다.
어려운 길을 가지말고 RedisTemplate을 사용하기로 해보자.
pom.xml에 추가
jedis 버전 정보 확인
redis.clients
jedis
2.2.1
org.springframework.data
spring-data-redis
1.2.0.RELEASE
root-context.xml에 추가
다양하게 사용해 보자
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 redisTemplate;
@Resource(name="redisTemplate")
private ValueOperations 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 redisTemplate;
@Resource(name="redisTemplate")
private ValueOperations 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 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