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