redis过期key监听

修改配置文件 redis.conf
notify-keyspace-events Ex

# K    键空间通知,以__keyspace@__为前缀
# E    键事件通知,以__keysevent@__为前缀
# g    del , expipre , rename 等类型无关的通用命令的通知, ...
# $    String命令
# l    List命令
# s    Set命令
# h    Hash命令
# z    有序集合命令
# x    过期事件(每次key过期时生成)
# e    驱逐事件(当key在内存满了被清除时生成)
# A    g$lshzxe的别名,因此”AKE”意味着所有的事件

重新启动redis
原理:每个库中redis将失效的key 已发布/订阅方式 保存。 发布到频道__keysevent@__ 代替选择的redis库 __keysevent@3__这种形式。
然后取改频道。获得key
以下为实例:

/**
 * 
 * @ClassName:  ExpiredMessageListenerImpl   
 * @Description:TODO(rediskey失效监听)   
 */
public class ExpiredMessageListenerImpl  extends JedisPubSub {
  
 
    @Override  
    public void onMessage(String channel, String message) {  
        System.out.println("channel11111111:" + channel + "receives message :" + message);  
      //对该key进行业务处理。。。。。
    }  
  
    @Override  
    public void onPMessage(String pattern, String channel, String message) {  
  
    }  
  
    @Override  
    public void onSubscribe(String channel, int subscribedChannels) {  
        System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);  
        
    }  
  
    @Override  
    public void onPUnsubscribe(String pattern, int subscribedChannels) {  
  
    }  
  
    @Override  
    public void onPSubscribe(String pattern, int subscribedChannels) {  
  
    }  
  
    @Override  
    public void onUnsubscribe(String channel, int subscribedChannels) {  
        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);  
    }  
    
    
    public static void main(String[] args) {
     Jedis jedis = JedisUtil.jedisPool.getResource();  
     jedis.select(3);
//      jedis.set("oneKey", "suhao");
//          jedis.expire("oneKey", 30);
     
     ExpiredMessageListenerImpl listener = new ExpiredMessageListenerImpl();  
     jedis.subscribe(listener, "__keyevent@3__:expired"); 
       

}

你可能感兴趣的:(redis过期key监听)