[REDIS] 레디 스의 키 스페이스 행사하지 발사
REDIS레디 스의 키 스페이스 행사하지 발사
나는 하나 개의 파일에 나는 간단한 스크립트 설정을 가지고 레디 스 키를 삭제, 두 레디 스 클라이언트를 가지고 :
var redis = require("redis");
var client = redis.createClient('6379','127.0.0.1');
client.config("SET","notify-keyspace-events", "KEA");
client.set("string key 1", "string val", redis.print);
client.set("string key 2", "string val", redis.print);
client.set("placeholder","placeholder value", redis.print);
client.del("string key 1", redis.print);
client.del("string key", redis.print);
두 번째 파일에, 나는 가입자 역할을하는 레디 스 클라이언트가 :
var redis = require("redis");
var subscriber = redis.createClient('6379','127.0.0.1');
const REDIS_PUB_MESSAGE = 'redis_pub_message';
const EVENT_SET = '__keyevent@0__:set';
const EVENT_DEL = '__keyevent@0__:del';
const SPACE_SPECIFIC_KEY = '__keyspace@0__:placeholder set';
const EVENT_SPECIFIC_KEY = '__keyevent@0__:placeholder set';
const SPACE_SPECIFIC_KEY_set = '__keyspace@0__:set placeholder';
const EVENT_SPECIFIC_KEY_set = '__keyevent@0__:set placeholder';
subscriber.on('message', function(channel, key) {
switch (channel) {
case SPACE_SPECIFIC_KEY_set:
console.log('space specific key channel:',channel,'key:',key);
case EVENT_SPECIFIC_KEY_set:
console.log('event specific key channel:',channel,'key:',key);
case EVENT_SPECIFIC_KEY:
console.log('space specific key channel:',channel,'key:',key);
case SPACE_SPECIFIC_KEY:
console.log('event specific key channel:',channel,'key:',key);
}
});
키 '자리'그래서 나는 '메시지'핸들러에서 모든 출력을받지 오전 어떤 좋은 이유가, 설정되는?
해결법
-
==============================
1.당신은 특정 채널에 가입자 클라이언트를 구독하는 것을 잊었다. 모든 이벤트를보고 싶은 경우 또한, 당신은 패턴 기반 구독을 사용해야합니다.
당신은 특정 채널에 가입자 클라이언트를 구독하는 것을 잊었다. 모든 이벤트를보고 싶은 경우 또한, 당신은 패턴 기반 구독을 사용해야합니다.
당신이 뭔가를 (안된) 수행 할 수 있습니다 :
subscriber.on("pmessage", function (pattern, channel, message) { console.log("("+ pattern +")" + " client received message on " + channel + ": " + message); switch (channel) { // blah blah blah // ... } }); subscriber.psubscribe(''__key*__:*')
레디 스 문서에서 더 많은 정보를 참조하고, node_redis 예이다.
최신 정보:
여기서 채널 정액제 가입 패턴의 차이를 설명하기위한 일례이다. 적절한 오류 처리는 간결함을 위해 생략한다.
var redis = require("redis"); var client = redis.createClient('6379','127.0.0.1'); var subscriber1 = redis.createClient('6379','127.0.0.1'); var subscriber2 = redis.createClient('6379','127.0.0.1'); // First subscriber listens only to events occurring for key mykey function S1(next) { subscriber1.on('message', function(channel, msg) { console.log( "S1: received on "+channel+" event "+msg ) }); subscriber1.subscribe( "__keyspace@0__:mykey", function (err) { next(); }); } // Second subscriber listens to events occuring for ALL keys function S2(next) { subscriber2.on('pmessage', function(pattern,channel, msg) { console.log( "S2: received on "+channel+" event "+msg ) }); subscriber2.psubscribe( "__keyspace@0__:*", function (err) { next(); }); } // Do something with keys mykey and anotherkey function do_something() { client.set("mykey","example", function( err ) { client.set("mykey", "another example", function( err ) { client.del("mykey", function( err ) { client.set("anotherkey","example", function( err ) { client.del("anotherkey"); }); }); }); }); } // Here we go S1( function () { S2( function () { do_something(); }); });
이 스크립트의 결과는 다음과 같습니다
S1: received on __keyspace@0__:mykey event set S2: received on __keyspace@0__:mykey event set S2: received on __keyspace@0__:mykey event set S1: received on __keyspace@0__:mykey event set S1: received on __keyspace@0__:mykey event del S2: received on __keyspace@0__:mykey event del S2: received on __keyspace@0__:anotherkey event set S2: received on __keyspace@0__:anotherkey event del
당신은 두 번째 가입자가 모든 키에 대한 이벤트를 수신하는 동안 처음으로 가입자가,의 mykey 만 이벤트를받은 것을 볼 수 있습니다.
from https://stackoverflow.com/questions/29833939/redis-keyspace-event-not-firing by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 레디 스 메모리 누수를 결정? (0) | 2020.01.17 |
---|---|
[REDIS] 관계형 DB 메모리? (0) | 2020.01.17 |
[REDIS] 레디 스 목록에서 특정 인덱스에서 제거 요소 (0) | 2020.01.16 |
[REDIS] ServiceStack 레디 스, 어떻게 목록으로 루아 테이블을 반환 (0) | 2020.01.16 |
[REDIS] 봄 부트 프레임 워크를 JedisConnectionFactory 기반의 타임 아웃을 구성하는 방법 (0) | 2020.01.16 |