Redis를 설치하면 기본적으로 원격 접속이 가능하다. 

해당 서버 이외에는 원격 접속을 막고 싶다면 설정 파일에서 bind 정보를 로컬로 지정하면 된다.


 

redis.conf 파일을 열고


bind 127.0.0.1


이렇게 로컬 아이피를 지정하면 해당 서버에서만 접속이 가능하게 된다.

REDIS 명령어 중에 FLUSHALL과 FLUSHDB 가 있다.


FLUSHALL은 모든 DB의 키를 삭제하는 것이고.

FLUSHDB는 해당 위치에 있는 DB의 모든 키를 삭제한다.


FLUSHALL는 어느 위치에서건 사용하면 되고,

FLUSHDB는 해당 DB로 이동해서 사용하면 된다.


127.0.0.1:7379[1]> SELECT 2

127.0.0.1:7379[1]> FLUSHDB


2번 DB의 키가 모두 삭제된다.


redis-2.6.* 버전을 설치하려고 할때 make 에러가 나는 경우.. 해결 방법


# cd /usr/local/src

# wget http://redis.googlecode.com/files/redis-2.6.5.tar.gz

# tar zxvf redis-2.6.5.tar.gz

# cp -Rf redis-2.6.5 /usr/local/redis

# cd /usr/local/redis

# make


 

이렇게 진행을 하면, 


/usr/local/redis/src/zmalloc.c:223: undefined reference to `__sync_add_and_fetch_4'


이런 식의 에러가 떨어지는 경우가 있을 것이다. 

(어쨌든 make를 한 번 실행해주도록 한다. src/.make-settings 생성되도록)


gcc 컴파일 옵션의 문제인데, cpu 타입을 정해주면 된다.


make시 cpu 타입을 –march로 정해주도록 작업을 해야됨

(cpu타입에 관한 자세한 옵션값은 http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html에서 확인)


우선 해당 서버의 cpu타입을 확인

# uname –a

Linux localhost.localdomain 2.6.18-308.el5PAE #1 SMP Tue Feb 21 20:46:05 EST 2012 i686 i686 i386 GNU/Linux

이렇게 나왔다면 i686 이다.


src폴더의 .make-settings 에서 –march를 설정하자.

# vi ./src/.make-settings

OPT=-O2 –march=i686

# make


이번엔 에러없이 잘 설치가 되었을 것이다.

 

Redis Pub/Sub 사용시..


Pub에서 사용하는 Connection 혹은 Connection Pool 을 

Sub에서도 함께 사용하지 말라.


Sub가 제대로 작동하지 않게 된다.. 고 한다.. 


통산 Pub에는 Connection Pool 만들어서 사용하고,

Sub는 전용 Connection  하나 만들어서 처리하면 된다.

 

redis.properties 설정시 참고..


tuc.ss.redis.serverIp=***.***.***.***

tuc.ss.redis.serverPort=****

tuc.ss.redis.password=****

tuc.ss.redis.database=1

tuc.ss.redis.timeout=120000

tuc.ss.redis.pool=true

tuc.ss.redis.maxActive=100

tuc.ss.redis.maxIdle=50

tuc.ss.redis.minIdle=10

tuc.ss.redis.maxWait=12000

# whenExhaustedAction - WHEN_EXHAUSTED_FAIL 0, WHEN_EXHAUSTED_BLOCK 1, WHEN_EXHAUSTED_GROW 2

tuc.ss.redis.whenExhaustedAction=1

tuc.ss.redis.testOnBorrow=true

tuc.ss.redis.testOnReturn=true

tuc.ss.redis.testWhileIdle=true

tuc.ss.redis.timeBetweenEvictionRunsMillis=3600000

tuc.ss.redis.numTestsPerEvictionRun=5

tuc.ss.redis.minEvictableIdleTimeMillis=300000

tuc.ss.redis.softMinEvictableIdleTimeMillis=300000



applicationContext-redis.xml 설정시 참고...


<bean id="jedisPoolConfig_SessionServer" class="redis.clients.jedis.JedisPoolConfig" lazy-init="false">  

<property name="maxActive" value="${tuc.ss.redis.maxActive}" />  

<property name="maxIdle" value="${tuc.ss.redis.maxIdle}" />  

<property name="minIdle" value="${tuc.ss.redis.minIdle}" />  

<property name="maxWait" value="${tuc.ss.redis.maxWait}"/>

<property name="whenExhaustedAction" value="${tuc.ss.redis.whenExhaustedAction}"/>

<property name="testOnBorrow" value="${tuc.ss.redis.testOnBorrow}" />  

<property name="testOnReturn" value="${tuc.ss.redis.testOnReturn}"/>  

<property name="testWhileIdle" value="${tuc.ss.redis.testWhileIdle}"/>  

<property name="timeBetweenEvictionRunsMillis" value="${tuc.ss.redis.timeBetweenEvictionRunsMillis}"/>  

<property name="numTestsPerEvictionRun" value="${tuc.ss.redis.numTestsPerEvictionRun}"/>  

<property name="minEvictableIdleTimeMillis" value="${tuc.ss.redis.minEvictableIdleTimeMillis}"/>    

<property name="softMinEvictableIdleTimeMillis" value="${tuc.ss.redis.softMinEvictableIdleTimeMillis}"/> 

</bean>  

    

<bean id="jedisConnectionFactory_SessionServer" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" lazy-init="false">

<property name="hostName" value="${tuc.ss.redis.serverIp}" />  

<property name="port" value="${tuc.ss.redis.serverPort}" />  

<property name="password" value="${tuc.ss.redis.password}" />

<property name="database" value="${tuc.ss.redis.database}" />

<property name="timeout" value="${tuc.ss.redis.timeout}" />        

<property name="usePool" value="${tuc.ss.redis.pool}" />       

<property name="poolConfig" ref="jedisPoolConfig_SessionServer" />  

</bean> 


<bean id="stringRedisTemplate_SessionServer" class="org.springframework.data.redis.core.StringRedisTemplate" lazy-init="false">

<property name="connectionFactory" ref="jedisConnectionFactory_SessionServer"/>

</bean>


실제 서비스하는 설정값.. 

아이피, 포트, 비밀번호는 숨김..

여러 작업을 한방에 몰아서 일괄 실행하고 그 결과를 얻어오는 방법..

Spring Data의 Redis 활용해서.. Pipeline 을 이용한 일괄 실행하기.

매번 루프 돌면서 stringRedisTemplate.opsForHash().get() 하는 거에 비하면 루프 카운트가 클수록 대박 빠르겠지요?

소스 활용은 대략 이러함..

List<Object> result = null;

RedisConnectionFactory conFactory = stringRedisTemplate.getConnectionFactory();

RedisConnection con = RedisConnectionUtils.bindConnection(conFactory);

try {

con.openPipeline();

try {

Iterator<String> it = usersId.iterator();

while ( it.hasNext() ) {

String userId = (String)it.next();

stringRedisTemplate.boundHashOps(QUEUE_NAME_USER_STATUS).get(userId);

stringRedisTemplate.boundHashOps(QUEUE_NAME_USER_MYSTATUS).get(userId);

stringRedisTemplate.boundHashOps(QUEUE_NAME_USER_LOGINDEVICE).get(userId);

stringRedisTemplate.boundHashOps(QUEUE_NAME_USER_IPLISTENSS).get(userId);

}

} finally {

result = con.closePipeline();

}

} finally {

    RedisConnectionUtils.unbindConnection(conFactory);

}


redis 설치 를 했었다.

이번에 redis 복제를 해보자.


설치만큼이나 간단하게 작업이 된다.


우선 사용할 서버들에 모두 redis를 설치하고,

redis.conf 파일에서 Master냐 Slave냐에 따라 설정을 해준다.

http://redis.io/topics/replication 참조


 

Master 의 경우


SECURITY 섹션에서 requirepass 를 설정하기만 하면 된다.


# requirepass foobared


이 부분을 주석 제거하고, 원하는 비밀번호로 설정..


Slave 의 경우


REPLICATION 섹션에서 설정을 변경한다.


# slaveof <masterip> <masterport>


주석 제거하고, 마스터의 아이피와 포트를 적는다.


기본 포트를 사용한다면 6379


# masterauth <master-password>


주석 제거하고, requirepass에서 설정한 비밀번호를 적는다.


# repl-ping-slave-period 10


주석 제거하고, 기본값 10으로 사용


# repl-timeout 60


주석 제거하고, 기본값 60으로 사용

repl-ping-slave-period 값보다 큰 값을 사용하라는 코멘트가 있다.



Master에서 redis-cli 실행해서 info 명령을 내려보자.

redis 127.0.0.1:6937> info

role:master

slave0:192.168.0.205,6937,online


Slave에서 redis-cli 실행해서 info 명령을 내려보자.

redis 127.0.0.1:6937> info

role:slave

master_host:192.168.0.204

master_port:6937

master_link_status:up

master_last_io_seconds_ago:8

master_sync_in_progress:0

slave_priority:100


** 2.6 버전부터는 slave-read-only 옵션이 추가되어 slave가 읽기용으로만 사용됨

** 현재 2.6은 안정버전이 아니라서, 패스..


설치라고 할 것도 없음

http://redis.io/download 에서 설명하는대로 하면 됨.. 위치만 좀 달리..

의존성 패키지 설치

# yum install gcc

redis 설치

# cd /usr/local/src
# wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz
# tar zxvf redis-2.4.14.tar.gz
# cp -Rf redis-2.4.14 /usr/local/redis
# cd /usr/local/redis
# make

설치 끝..

포트 변경 및 접속 비밀번호 설정은 redis.conf 파일을 열어서 수정한다.

# 포트 번호 변경하고 주석 제거
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

# 비밀번호 설정하고 주석 제거
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
requirepass foobared

위 설정파일대로 서버 구동을 하기 위해 설정파일을 지정해서 실행..

# nohup ./src/redis-server /usr/local/redis/redis.conf &

명령행 클라이언트를 실행하려면

# ./src/redis-cli
redis 127.0.0.1:6379>

포트를 변경했다면

# ./src/redis-cli -p 포트번호
redis 127.0.0.1:6379>

비밀번호를 설정했다면, 접속 후

redis 127.0.0.1:6379>AUTH 비밀번호

redis 명령어는 아래에 자세히 나온다.

http://redis.io/commands

+ Recent posts