sql >> データベース >  >> NoSQL >> Redis

JedisによるRedisキーの有効期限の通知

    pub-subでそれを行うことができます モデルのみRedisサーバーを起動する

    redis.confのnotify-keyspace-eventsをKEAに変更します(これは要件によって異なります)。詳細は、redisのドキュメントhttp://redis.io/topics/notificationsに記載されています。

    Redis Javaクライアント(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。購読 (新しいKeyExpiredListener()、 "__ key * __:*"); -このメソッドは正規表現パターンベースのチャネルをサポートしますが、jedis。サブスクライブ (new KeyExpiredListener()、 "" [email protected] __:notify ");-このメソッドは完全/正確なチャネル名を取ります

    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を実行します。次の出力が表示されます。

    onPSubscribe __key*__:* 1
    onPMessage pattern __key*__:* [email protected]__:notify set
    onPMessage pattern __key*__:* [email protected]__:set notify
    onPMessage pattern __key*__:* [email protected]__:notify expire
    onPMessage pattern __key*__:* [email protected]__:expire notify
    onPMessage pattern __key*__:* [email protected]__:notify expired
    onPMessage pattern __key*__:* [email protected]__:expired notify
    

    に関心がある1つのユースケース 期限切れのキーも同様です。

    注: Redisは、キースペースイベントの通知を通じてキーの有効期限が切れたときにのみキーを提供します。キーが期限切れになると、値は失われます。キーの有効期限の値を取得するには、シャドウキーのトリッキーな概念を使用して、以下に示す次の回避策を実行できます。

    通知キーを作成するときは、特別な期限切れの「シャドウ」キーも作成します(実際の通知を期限切れにしないでください)。例:

    // set your key value
    SET notify umq 
    //set your "shadow" key, note the value here is irrelevant
    SET shadowkey:notify "" EX 10 
    

    //チャネル[email protected]で有効期限メッセージを取得します :expired // ":"(または使用することを決定したセパレーター)でキーを分割し、2番目の部分を使用して元のキーを取得します

    // Then get the value and do whatever with it
    GET notify
    // Then delete the key
    DEL notify
    

    シャドウキーの値は使用されないため、可能な限り最小の値を使用することに注意してください。空の文字列""である可能性があります。セットアップにはもう少し手間がかかりますが、上記のシステムはまさに必要なことを実行します。オーバーヘッドは、実際にキーを取得および削除するためのいくつかの追加コマンドと、空のキーのストレージコストです。

    それ以外の場合は、キーに付加された値が含まれるようにキーを準備する必要があります。

    お役に立てば幸いです。



    1. Sparkシェルを使用したHBase上のSpark

    2. Redis接続ECONNREFUSED127.0.0.1:6379

    3. マングースfindByIdAndUpdateが正しいモデルを返さない

    4. MongoDB埋め込みオブジェクトにはIDがありません(null値)