2013년 10월 8일 화요일

spring-data-redis(with jedis) 을 이용한 Redis 삽질

1. CentOS 5.9 Final 에 Redis 설치


회사에서 하나 제공 받은 가상 서버에 CentOS 6.3 이 안깔려서 5.9 로 제공받았음.
기본 yum 저장소에는 Redis 가 존재하지 않아 EPEL 서드파티 저장소를 추가해서 설치(어쩌다 일본의 미러 저장소에서 받게 되었나 몰라...).

> sudo rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm 
> sudo yum install redis

2. 설정파일


/etc/redis.conf 에서 설정을 관리. 복수개의 Redis 서버를 띄워야 할 경우 설정파일을 복사해서 redis-server 을 통해 띄우는데, 일단 개발용으로 띄울 것이므로 간단한 설정만 변경

> sudo vi /etc/redis.conf


설정 중  아래 내용을 수정해보자

...
bind 127.0.0.1
...
# requirepass foobared
...


bind 는 접속 허용할 IP 정도 되겠고, requirepass 가 외부에서 접근할 때 인증용으로 사용할 비밀번호이다. spring-data-redis 에서 설정할 때 필요하므로 requirepass 는 잘 기억해야함.

3. 서버 실행


> sudo /etc/rc.d/init.d/redis start

4. Maven(pom.xml) 추가


이제 Eclipse 에서 Maven 프로젝트를 실행하고 아래와 같이 라이브러리를 추가.

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.1.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.1.0version>
</dependency>
현재 상태에서는 버젼 선택에서 조심해야 함. 무턱대고 jedis 2.2.0 인 최신버젼 썼다간 spring-data-redis 에서 jedis 에서 빠진 class(redis.clients.jedis.BinaryTransaction)을 찾아 오류만 구경할 수 있음.

5. Spring 설정


Spring 설정 파일에 설정을 추가함. spring-servlet.xml 을 애용하는 필자는 아래 내용을 추가.

<bean id="jedisConnectinFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="192.168.0.xx" />
    <property name="port" value="6379" />
    <property name="password" value="xxxx" />
    <property name="usePool" value="true" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectinFactory" />
</bean>


6. Java 코딩


원하는 곳에 bean 을 주입하여 사용

...
@Autowired
private RedisTemplate<String, String> redisTemplate;
...
@Resource(name="redisTemplate")
private ValueOperations<String, String> valueOps;

public void append() {
    ...
    valueOps.set("1111", "2222");    // Key/Value 형태 입력
    .... 
}

ValueOperations 는 Key/Value 형태의 자료구조 형태이고, ListOperations, HashOperations, SetOperations, ZSetOperations 가 각각 List, Hash, Set, Sorted Set 형태를 지원한다. 각 자료구조 형태에 맞는 이름으로 method 을 제공하기 때문에 Redis 의 자료 구조에 맞는 값 설정 및 불러오기를 이용하자.

7. 주의


입력된 값을 확인하기 위해 keys 을 이용해서 모든 값을 불러올 수 있는데, 운영서버에서는 로그를 남기기 위한 용도로도 쓰면 안된다. flushdbflushall 와 같은 전체 삭제도 운영에서 쓰면 안된다. 왜냐하면, 속도가 매우 느리다!!! 그냥 순차적으로 반복문을 돌면서 삭제를 하고, fork 을 한 상태에서(복사본을 만들어서) 작업을 하는 것이 아니기 때문에, 이 반복문이 끝나기 전까진 모든 작업이 대기 상태에 빠지게 된다.

댓글 없음:

댓글 쓰기