redis过期key删除

LZ一开始配置到启动类里面,结果出现了主线程阻塞的情况。

如下是流程:

首先修改配置文件redis.conf中的:notify-keyspace-events Ex,默认为notify-keyspace-events "" (注释掉默认的,注意notify-keyspace-events Ex之前不能有空格)

启动初始化类里面的contextInitialized方法中加入以下代码:(启动一个线程执行订阅功能)

Thread thread = new Thread(传入需要参数--既然是redis监控必然需要jedis参数);thread.start();

之后再编写业务代码

resource.psubscribe(pubSub, "__keyevent@0__:expired");

这里是订阅监听,__keyevent@0__:expired是监听的频道

redis监听类

public class Listener extends JedisPubSub{    private static Logger logger = Logger.getLogger(Listener.class);

    private XXX xxx;    private YYY yyy;

    public Listener(XXX xxx, YYY yyy) {        this.xxx= xxx;        this.yyy= yyy;    }

    @Override    public void onPMessage(String pattern, String channel, String message) {        logger.info("onPMessage: channel[" + channel + "], message[" + message + "]");        {业务内容}    }

    @Override    public void onMessage(String channel, String message) {        logger.info("onMessage: channel[" + channel + "], message[" + message + "]");    }

    @Override    public void onSubscribe(String channel, int subscribedChannels) {        logger.info("onSubscribe: channel[" + channel + "]," + "subscribedChannels[" + subscribedChannels + "]");    }

    @Override    public void onUnsubscribe(String channel, int subscribedChannels) {        logger.info("onUnsubscribe: channel[" + channel + "], " + "subscribedChannels[" + subscribedChannels + "]");    }

    @Override    public void onPUnsubscribe(String pattern, int subscribedChannels) {        logger.info("onPUnsubscribe: pattern[" + pattern + "]," + "subscribedChannels[" + subscribedChannels + "]");    }

    @Override    public void onPSubscribe(String pattern, int subscribedChannels) {        logger.info("onPSubscribe: pattern[" + pattern + "], " + "subscribedChannels[" + subscribedChannels + "]");    }}

原文地址:https://www.cnblogs.com/autumn007/p/10489776.html

时间: 2024-10-20 11:47:16

redis过期key删除的相关文章

redis过期key的清理策略

一,有三种不同的删除策略(1),立即清理.在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作. (2),惰性清理.键过期了就过期了,不管.当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key (3),定期清理.每隔一段时间,对expires字典进行检查,删除里面的过期键. 二,详细说明三种清理方式的优劣(1)立即清理立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放.但是立即删除

Redis过期键删除策略及回收策略

一.前言 Redis的所有键都可以设置过期策略,Redis的每个设置了过期时间的key都会被放在一个独立的字典中,用于遍历删除. 二.过期策略 1.先区分两个概念,被动删除与主动删除 1)被动删除:key再被操作时,Redis主动检查key是否过期,过期则删除:   优劣:对CPU友好,只有CPU在被操作时删除,不浪费CPU时间:对内存不友好,如果同时大量key过期,这些key在被使用前不会被删除造成资源浪费: 2)主动删除:Redis会定期随机扫描一批设置了过期时间的key并进行删除处理:当已

redis过期键删除策略以及大key删除方法

今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS); 设置key过期为一毫秒,导致缓存中有时没有商品信息,因为在这一毫秒内有可能已经从数据库中取到了最新数据,并且又放到了缓存中,一毫秒过后key过期了,缓存中就没了商品信息. 正确的应该这样写redisTemplate.expire(Cach

Redis过期键删除策略

三种删除策略: 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作. 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,就返回该键. 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键.至于要删除多少过期键,以及要检查多少个数据库,则由算法决定. 在这三种策略中,第一种和第三种为主动删除策略,而第二种则为被动删除策略. 定时删除策略是对内存最友

redis 过期键删除策略

redis 的过期键的过期时间都保存在过期字典中,过期键的删除策略有3种 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即删除对键的删除操作. 惰性删除:放任键过期不管,但每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键.如果没有过期,就返回该键. 定期删除:每隔一段时间,程序对数据库进行一次检查,删除里面的过期键.至于删除多少过期键,以及检查多少数据库,有算法决定. 1 定时删除特点 优点:对内存友好,通过定时器可以保证过期键过期键

redis 下key的过期时间详解 :expire

Redis是一个开源的Key-Value数据缓存,和Memcached类似. Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型). Jedis 是 Redis 官方首选的 Java 客户端开发包. redis通过expire命令来设置key的过期时间. 语法:redis.expire(key, expiration) 1. 在小于2.1.3的redis版本里,只能对key设置一次exp

redis学习笔记——Redis过期键的删除策略

Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,那就返回该键: 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键.至于删除多少过期键,以及要检查多少个数据库,则由算法决定. 下面我们来看看三种策略的优缺比较: 定时删除策略对内存是

Redis big key过期导致应用超时

突然收到告警,提示redis挂了,同时大群也在说某某redis连接超时了,过了一会儿就恢复了.这时登上服务器,查看监控.首先看看qps: 可以看到qps并不高,但是中间有段时间没取到数据是怎么回事?那么继续看看redis的cpu使用率: 可以看到cpu已经饱和,这也就能解释为何断图了,因为redis是单线程,在使用cpu 100%以后,就无法处理其他的命令了,zabbix也就无法执行info命令取qps了.那么已经知道是cpu使用饱和造成的问题,那么到底是什么原因呢?那么继续查看,cpu使用高的

Redis 过期键的设置、获取和删除过期时间

Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内存. 设置的键的生存时间也很容易,可以通过4个命令设置(任选一即可):EXPIRE.PEXPIRE.EXPIREAT.PEXPIREAT命令,这4个命令看起来不同但是背后实现原理都是一样的.常用的其实就是EXPIRE和PEXPIRE这两个,前者是以秒设置过期时间,后者是以毫秒. 以秒来设置,设置aa