본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Node.js

NodeJs Redis 연동(NodeJs 레디스연동, zrangebyscore)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 8. 16.

 

 

redis를 연동하기 위해서는 redis와 관련된 모듈을 설치한다.

npm install redis

 

사용법은 매우 쉽다.

const REDIS = require('redis');
var redis = REDIS.createClient(6379, '127.0.0.1');
//이하 내용은 조회..
redis.quit();

 

자바에서 지원하는 jedis나 기타 라이브러리랑 비교해보면 속도차이가 엄청나게 난다.

예를들어, 자바에서 redis를 연동해서 특정 데이터를 100만건 저장한다 하면, 자바로는 1분내외정도 걸리는데 Node.js에서는 5초 이내 완료한다..

 

Redis에서 안타까운 점이 바로 조.회.기.능.이 약하다는 점인데..zrangebyscore 기능을 활용하면 나름 기간별로 데이터를 가져오는 흉내를 낼 수 있다.

 

먼저 저장하는 함수를 살펴보자.

const REDIS = require('redis');
var redis = REDIS.createClient(6379, '127.0.0.1');
var endNum  = 1000000;  //1백만건을 넣어보았다.

for(var i=0;i < endNum;i++){
    var json = {test: makeRandom(1), test2:""+i,number : i, date:new Date()};
    redis.zadd("대상",new Date().getTime(),JSON.stringify(json) );
    if(i == endNum-1){
    	console.log('end working',new Date());
	}
}    
redis.quit();

정말 후딱 넣는다. 자바랑 비교가 안될 정도로..

위 형식으로 데이터를 넣으면 나중에 데이터를 가져올 때 json으로 파싱하기가 쉽다.

zadd 함수를 살펴보면, 첫번째는 집어넣을 대상, 두번째는 타임스탬프, 세번째는 데이터(문자열)이다.

 

저렇게 넣은 데이터는 아래처럼 가져올 수 있다.

const REDIS = require('redis');

var redis = REDIS.createClient(6379, '127.0.0.1');


var first_query = new Date("2019-07-19 13:00:00").getTime();
var second_query = new Date("2019-07-19 15:46:00").getTime();

redis.zrangebyscore("대상",first_query,second_query,'limit',0,200000,(res,list)=>{
        if(list){
            console.log(list.length);
        }
});

딱 봐도 직관적이다.

첫번째는 조회할 대상, 두번째와 세번째는 타임스탬프의 범위, 그리고 레디스가 고맙게도 조회데이터를 페이징해서 가져올 수 있게 limit라는 변수와 시작페이지, 끝페이지를 입력받게 해 놓았다.

가져오는 zrangebyscore 함수의 파라미터를 다시한번 정리하면,

1. 조회대상, 2. 처음 시간값, 3. 마지막 시간값, 4. 'limit' 변수(상수다), 5. 시작페이지값, 6. 끝 페이지값, 7. 콜백

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글