2015년 9월 4일 금요일

Redis 설정과 랭킹처리(node.js)

redis용 npm 모듈을 설치한다.

  npm install redis


레디스 서버와 연결한다.

var redis = require('redis');
var client = redis.createClient("6379", "192.192.0.0");
client.on('connect', function() {
    //console.log('connected');
});

redis.createClient("6379", "192.192.0.0")
레디스 포트는 설정을 바꾸지 않는한,  "6379"번을 사용한다.
redis.createClient("포트", "레디스서버 IP")
이다.


점수를 추가한다

var board = "leaderboard";
var score = 13;
var id = "blaknwhite";
client.zadd(board, score, id, function(err, reply){
    if(err){
        console.log("error");
        return;
    }else{
        console.log("ranking : " + reply);
    }
});

client.zadd(board, score, id, function(err, reply)
board는 키값이다. 이 키값으로 랭킹그룹을 구분한다.
예를 들어 12번 스테이지의 랭킹그룹과 13번 스테이지의 랭킹그룹을 가지고 싶다면 키값을
"stage12"와 "stage13"으로 설정하여 그룹을 나눌 수 있다.
score는 점수를 넣는다.
id에는 유저id를 넣는다.
function(err, reply)는 콜백 함수로서, 에러가 발생하면 err에 값이 있게 되고, 정상적일때는 reply에 rank값이 들어있다.
이때의 rank는  작은값을 0으로 sort 했을때(오름차순)의 값이다.

예를 들어 id(score) 가
  black1(10) ---- 0
  black2(22) ---- 1
  black3(34) ---- 2
라면 black1의 rank는 0,black3는 2 가 된다.

만약 내림차순으로 얻으려면( black3의 랭킹이 0)

client.zrevrank( board, save_data_id, function(err, reply){
});

을 사용한다.

두개의 command를 동시에 실행한다

만약 점수를 추가하면서 zrevrank의 값을 얻어 오려면, 두개의 command를 동시에 실행하는
multi를 사용하면 된다.

var multis = client.multi();
multis.zadd( board, score, id);
multis.zrevrank( board, id);
multis.exec(function(err, re){
    if(err){
        console.log("error");
        return;
    }else{
        console.log("ranking : " + re[1]);
    }
});

콜백함수의 re에는 값이 배열 형식으로 들어가 있다
 re[0] -> zadd의 return값
 re[1] -> zrevrank의 return값


랭킹리스트를 가져온다

내림차순으로 0등부터 2등까지를 점수와 함께 가져오고 싶다면

var board = "leaderboard";
var start= 0;
var end = 2;
client.ZREVRANGE(board, start, end, 'WITHSCORES', function(err, reply){
    if(err){
        console.log("error");
        return;
    }else{
        var count = reply.length;
        var j =0;
        for(var i=0; i < count; i+=2 ){
            console.log("ID : "  + reply[i]);
            console.log("Score : "  + reply[i+1]);
        }
    }
});

예를 들어 id(score) 가
  black1(34) ---- 0
  black2(22) ---- 1
  black3(17) ---- 2
  black4(11) ---- 3
일때
 
client.ZREVRANGE(board, start, end, function(err, reply) 라면
reply[0] -> black1
reply[1] -> black2
reply[2] -> black3
이 된다.

점수도 같이 표시되는
client.ZREVRANGE(board, start, end, 'WITHSCORES', function(err, reply) 라면
reply[0] -> black1
reply[1] -> 34
reply[2] -> black2
reply[3] -> 22
reply[4] -> black3
reply[1] -> 17
이 된다.





 




댓글 없음:

댓글 쓰기