mythinkg

ignocide's blog


  • 홈

  • 아카이브

  • 태그

[redis - node] key event 받아보기

작성일 2016-03-07 | In redis |

redis key event 받아보기

  • redis key event 받아보기
  • 예제

관련페이지 : http://redis.io/topics/notifications

  • redis keyspace notification은 2.8버전부터 지원하며 버전 확인은
    -> info server 를 통해 확인 가능합니다.

레디스에서는 키 이벤트에 대한 것들의 설정을 하게 되면 pub/sub 패턴을 이용하여 메세지(이벤트)를 전달합니다. 키 이벤트가 발생을 하게 되면 redis서버에서는 keyspace,keyevent의 포맷으로 메세지를 전달합니다.

CONFIG SET nitifi-keyspace-events [option]

를 통해 설정하게 됩니다. options은 위 링크에 나와있습니다. 간단하게
keyspace에 관한 설정은 K
keyevent에 관한 설정은 E
그 뒤의 옵션으로 g, $, l, s, h, z, x, e등이 있으며 A를 통하여 앞의 모든것들 설정가능합니다.각각 옵션에 대한것은 위의 본문 링크를 들어가서 확인하시면 됩니다.

예.. 설명이 빈약합니다. ㅠ
keyspace에 대한 설정을 하게 되면 **__keyspace@__[key]** 라는 채널로 이벤트가 message로 발행이되고 keyevent에 대한 설정을 하게 되면 **__keyevent@__[event]** 라는 채널로 key가 message로 발행이됩니다.

받아볼 이벤트의 종류는 g, $, l, s, h, z, x, e, A 등을 통하여 설정가능합니다.
예로

CONFIG SET notifiy-keyspace-events KEA

라고 설정을 하게 된다면, 모든 이벤트에 대하여 keyspace,keyevent 채널로 발행이 될것입니다.
제가 맨처음 필요로 했었던 expire에 대한 이벤트의 기준으로만 받아보고 싶다면

CONFIG SET notifiy-keyspace-events Ex

이렇게 설정하면 됩니다.
결과로는

__keyevent@__:expired

의 채널로 키값이 message로 얻어지게 될것입니다.

간단히 redis에서의 pub/sub패턴을 소개하자면 publish,subscript, 즉, 발행, 구독! 레디스에서는 pub/sub를 패턴,채널,메세지의 요소로 나눠 이용합니다. publisher가 메세지를 해당 채널에 메세지를 전달하게 되면, 패턴에 일치하는 subscriber들이 메세지를 받아보게 됩니다.

예제

pub/sub예제이자 redis notification예제입니다. node입니다.

var redis = require("redis")
  , subscriber = redis.createClient()
  , red  = redis.createClient();

red.config("SET","notify-keyspace-events", "Ex");

subscriber.on("pmessage", function (pattern, channel, message) {
    console.log("pattern : "+pattern+" channel: "+channel+" message : "+message);
});
subscriber.psubscribe("__key*__:*");

red.setex("string key", 10,"string val",redis.print);

결과로는

pattern : __key*__:* channel: __keyevent@0__:expired message : string key

Ex로 설정하였기 때문에 해당 키가 expired된다면 해당 key값을 얻을 수 있습니다.

만약 KEA로 설정을 한다면

pattern : __key*__:* channel: __keyspace@0__:string key message : set
pattern : __key*__:* channel: __keyevent@0__:set message : string key
pattern : __key*__:* channel: __keyspace@0__:string key message : expire
pattern : __key*__:* channel: __keyevent@0__:expire message : string key
—————————————
pattern : __key*__:* channel: __keyspace@0__:string key message : expired
pattern : __key*__:* channel: __keyevent@0__:expired message : string key
이렇게 나옵니다. ㅎ

더 읽어보기 »

[nodejs - redis] redis - session 레디스 세션 이용하기

작성일 2016-01-27 | In redis |

redis를 session서버로 사용하는 방법

  • redis를 session서버로 사용하는 방법
  • 결과

session의 값을 server와 분리 시킴으로서 안정적으로 저장하고 여러개의 서버의 세션을 하나의 redis서버로 통합하여 사용 할 수 있습니다. session의 특성상 입출력이 빈번하기 때문에 redis의 성격과도 잘 맞다고 생각됩니다.

우선 사용 모듈은

npm install express-session
npm install redis
npm install connect-redis
npm install redis-session

입니다.

express와 레디스 설치 방법은 생략합니다.

//redis session require
var session = require('express-session');
var redis = require('redis');
var redisStore = require('connect-redis')(session);
var client = redis.createClient();

app.use(session(
    {
        secret: 'secret_key',
        store: new redisStore({
            host: "127.0.0.1",
            port: 6379,
            client: client,
            prefix : "session:",
            db : 0
        }),
        saveUninitialized: false, // don't create session until something stored,
        resave: true // don't save session if unmodified
    }
));

//....아래쪽...

//redis session input output
var router = express.Router();
router.get('/session/set/:value', function(req, res) {
    req.session.redSession = req.params.value;
    res.send('session written in Redis successfully');
});

app.get('/session/get/', function(req, res) {
    if(req.session.redSession)
        res.send('the session value stored in Redis is: ' + req.session.redSess);
    else
        res.send("no session value stored in Redis ");
});

를 app.js에 작성하면 설정이 끝나게 됩니다.

new redisStore 부분에 자신의 reids설정을 작성하고 db의 파라미터를 통하여 session store로 사용할 db index를 설정합니다.

결과

prefix를 통하여 키값의 앞에 붙일 값들을 정합니다. redis는 : <- 를 통하여 키값들을 grouping하게 됩니다. 즉, 위와 같이 해놓게 된다면 session에 해당하는 key값들은
아래 결과의 사진을 보게 됬을때 정리가 깔금하게 됩니다.

session의 사용방법은 여기를 참고해주시면 됩니다.
단순히 redis에 값을 저장하는 것이기 때문에 사용방법은 express-session과 같고 결과는 아래와 같이 나오는 걸 확인하여 session값이 저장됨을 볼 수있습니다.

더 읽어보기 »
1 2 3
ignocide

ignocide

web developr

22 포스트
8 카테고리
11 태그
RSS
© 2018 ignocide
Powered by Jekyll
Theme - NexT.Muse