JAVA实现redis超时失效key 的监听触发详解编程语言

过期事件通过Redis的订阅与发布功能(pub/sub)来进行分发。

而对超时的监听呢,并不需要自己发布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex,默认为notify-keyspace-events “” 

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

修改好配置文件后,redis会对设置了expire的数据进行监听,当数据过期时便会将其从redis中删除:

1.先写一个监听器:

 1 public class KeyExpiredListener extends JedisPubSub {   
 2    
 3     @Override   
 4     public void onPSubscribe(String pattern, int subscribedChannels) {   
 5         System.out.println("onPSubscribe "   
 6                 + pattern + " " + subscribedChannels);   
 7     }   
 8    
 9     @Override   
10     public void onPMessage(String pattern, String channel, String message) {   
11    
12         System.out.println("onPMessage pattern "   
13                         + pattern + " " + channel + " " + message);   
14     }   
15    
16    
17    
18 }  

 

2.订阅者:

 1 public class Subscriber {   
 2    
 3     public static void main(String[] args) {   
 4         JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");   
 5    
 6         Jedis jedis = pool.getResource();   
 7         jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");   
 8    
 9     }   
10    
11 }  

 

3.测试类:

public class TestJedis {   
   
    public static void main(String[] args) {   
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");   
   
        Jedis jedis = pool.getResource();   
        jedis.set("notify", "你还在吗");   
        jedis.expire("notify", 10);   
   
    }   
}  

4.结果:

先启动订阅者,然后执行测试类,然后等待10秒之后再监听类的方法中就可以获得回调。非常需要主要的时,[email protected]__:expired,艾特后面的0表示第几个是数据库,redis默认的数据库是0~15一共16个数据库。所以如果你存入的数据库是2,[email protected]__:expired

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16203.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论