복붙노트

[REDIS] 레디 스 키 Jedis로 통지를 만료

REDIS

레디 스 키 Jedis로 통지를 만료

내 키는 레디 스 데이터 저장소에 만료 될 때 레디 스와 유효 키 알림을 구현하려합니다. 레디 스 웹 사이트는 어떻게 http://redis.io/topics/notifications의 몇 가지 설명을 제공합니다,하지만 어떻게 어떤 예를 찾을 임없는이 Jedis 같은 레디 스 자바 클라이언트를 사용하려면?

그림이있는 모든 가능한 코드는 레디 스 새로운 메신저 매우 도움이 될 것입니다.

해결법

  1. ==============================

    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. ==============================

    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) {
    
            }
    
  3. from https://stackoverflow.com/questions/26406303/redis-key-expire-notification-with-jedis by cc-by-sa and MIT license