Redis的Java客户端Jedis可以通过订阅/发布(Pub/Sub)机制,接收那些以某种方式改变了Redis数据空间的事件通知。
Redis官网理论介绍地址:https://redis.io/topics/notifications
实现步骤:
1.修改配置:键空间通知功能耗费CPU,默认关闭,需要修改配置文件redis.conf或 操作CONFIG SET命令,设置notify-keyspace-events选项,来启用或关闭该功能。
2.对Redis实例进行发布订阅,指定监听类和监听事件类型;
3.监听类继承JedisPubSub,实现相应操作;
4.客户端进行操作,以触发订阅事件发生。
下面为代码实现
1.判断修改配置、发布订阅类
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisPubSub;
public class Subscriber {
public static void main(String[] args) {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "192.168.44.53");
Jedis jedis = pool.getResource();
config(jedis);
jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");
}
private static void config(Jedis jedis){
String parameter = "notify-keyspace-events";
List<String> notify = jedis.configGet(parameter);
if(notify.get(1).equals("")){
jedis.configSet(parameter, "KEA");
}
}
}
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
}
2.测试类:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class TestJedis {
public static void main(String[] args) {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "192.168.44.53");
Jedis jedis = pool.getResource();
jedis.set("notify", "umq");
jedis.expire("notify", 10);
}
}