[REDIS] 레디 스 키 Jedis로 통지를 만료
REDIS레디 스 키 Jedis로 통지를 만료
내 키는 레디 스 데이터 저장소에 만료 될 때 레디 스와 유효 키 알림을 구현하려합니다. 레디 스 웹 사이트는 어떻게 http://redis.io/topics/notifications의 몇 가지 설명을 제공합니다,하지만 어떻게 어떤 예를 찾을 임없는이 Jedis 같은 레디 스 자바 클라이언트를 사용하려면?
그림이있는 모든 가능한 코드는 레디 스 새로운 메신저 매우 도움이 될 것입니다.
해결법
-
==============================
1.당신은 술집 서브 모델로 할 수 있습니다 만 시작 레디 스 서버
당신은 술집 서브 모델로 할 수 있습니다 만 시작 레디 스 서버
(가) 통지 - 키 스페이스 - 이벤트 레디 스 문서 http://redis.io/topics/notifications에 주어진 KEA에 redis.conf에서 (이것은 당신의 필요 조건에 따라 다름) .Details 변경합니다.
레디 스 자바 클라이언트 (Jedis)는, 다음을 시도해보십시오
public class KeyExpiredListener extends JedisPubSub { @Override public void onPSubscribe(String pattern, int subscribedChannels) { System.out.println("onPSubscribe " + pattern + " " + subscribedChannels); } @Override public void onPMessage(String pattern, String channel, String message) { System.out .println("onPMessage pattern " + pattern + " " + channel + " " + message); } //add other Unimplemented methods }
**** 참고 ** jedis.psubscribe (새 KeyExpiredListener (), "__key * __ *"); -이 방법은 패턴 정규식 기반 채널을 지원 jedis.subscribe (새 KeyExpiredListener () ","0 __ @ __keyspace : 통보」) 반면, --This있어서 전체 / 정확한 채널 이름을 얻어
public class Subscriber { public static void main(String[] args) { JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost"); Jedis jedis = pool.getResource(); jedis.psubscribe(new KeyExpiredListener(), "__key*__:*"); } }
public class TestJedis { public static void main(String[] args) { JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost"); Jedis jedis = pool.getResource(); jedis.set("notify", "umq"); jedis.expire("notify", 10); } }
지금은 먼저 다음과 같은 출력을 볼 줘야 TestJedis.You을 실행 한 후 가입자을 시작 :
onPSubscribe __key*__:* 1 onPMessage pattern __key*__:* __keyspace@0__:notify set onPMessage pattern __key*__:* __keyevent@0__:set notify onPMessage pattern __key*__:* __keyspace@0__:notify expire onPMessage pattern __key*__:* __keyevent@0__:expire notify onPMessage pattern __key*__:* __keyspace@0__:notify expired onPMessage pattern __key*__:* __keyevent@0__:expired notify
지금 당신은 하나 개의 사용 사례를 만료 된 키의 값에 관심뿐만 아니라 곳.
참고 : 키가 만료되면 레디 스 만 KEYSPACE 이벤트의 통지를 통해 키의 만료에 키를 제공이 값은 손실됩니다. 에서 주문 당신이 주변에 그림자 키의 까다로운 개념 아래의 다음과 같은 작업을 수행 할 수 있습니다 만료 키의 값을 얻을 :
당신이 당신의 통지 키를 생성 할 때, 또한 (실제는 통지 만료되지 않습니다) "그림자"키를 만료 특별한을 만들 수 있습니다. 예를 들면 :
// set your key value SET notify umq //set your "shadow" key, note the value here is irrelevant SET shadowkey:notify "" EX 10
// 채널의 KeyEvent에 만료 메시지가 @ 0 : 만료 에 // 분할 키 ":"(또는 당신이 사용하기로 결정 분리기 무엇이든), 원래의 키를 얻기 위해 두 번째 부분을
// Then get the value and do whatever with it GET notify // Then delete the key DEL notify
shadowkey의 값이 가장 작은 값을 사용할 수 있도록 사용되지 않음을 참고, 빈 문자열 ""이 될 수 있습니다. 이 설정에 조금 더 작업입니다하지만 위의 시스템은 사용자가 원하는 기능을 수행합니다. 오버 헤드는 몇 가지 추가 명령이 실제로 검색하고 키 플러스 빈 키의 저장 비용을 삭제하는 것입니다.
그렇지 않으면 당신은 그것으로 추가 된 값을 포함하는 방식으로 키를 준비해야합니다.
당신 도움이되기를 바랍니다!
-
==============================
2.이것은 당신을 도움이 될 수 있습니다.
이것은 당신을 도움이 될 수 있습니다.
JedisPool jedisPool=null; JedisPoolConfig poolConfig = null; try { poolConfig=new JedisPoolConfig(); jedisPool = new JedisPool(poolConfig,"127.0.0.1" /*Host IP*/,1234 /*Port*/, 0); Jedis jedis=jedisPool.getResource(); jedis.expire("KeyName", 10 /*Key Expires in 10 seconds*/); } catch (Exception e) { }
from https://stackoverflow.com/questions/26406303/redis-key-expire-notification-with-jedis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 그냥 캐시인가? (0) | 2019.12.30 |
---|---|
[REDIS] 레디 스에 사용되는 기본 데이터 구조는 무엇입니까? (0) | 2019.12.30 |
[REDIS] PHP와 노드 사이의 공유 세션 (0) | 2019.12.30 |
[REDIS] 가장 효율적인 Node.js를 프로세스 간 통신 라이브러리 / 방법은 무엇입니까? (0) | 2019.12.30 |
[REDIS] 직접 메모리를 사용하여 대 레디 스 캐시 (0) | 2019.12.30 |