NutzCN Logo
问答 讨论一个关于redis key过期 删除缓存的问题
发布于 317天前 作者 Rekoe 195 次浏览 复制 上一个帖子 下一个帖子
标签: jedis

网上说 事件过期后 缓存会常驻内存 除非再请求才会清楚
按照网上的某些提示 通过订阅 __keyevent@0__:expired 事件可以捕获消息
具体code

public void init() {
		new Thread() {
			public void run() {
				RedisEventListener listener = new RedisEventListener();
				logger.info("开始监听Redis事件......");
				jedisPool.getResource().psubscribe(listener, "__keyevent@0__:expired");
			}
		}.start();
	}

RedisEventListener

public class RedisEventListener extends JedisPubSub {

	private static final Log logger = Logs.get();

	// 取得订阅的消息后的处理
	public void onMessage(String channel, String message) {
		// System.out.println(channel + "=" + message);
		logger.infof("收到redis事件onMessage:%s = %s", channel, message);
	}

	// 取得按表达式的方式订阅的消息后的处理
	public void onPMessage(String pattern, String channel, String message) {
		logger.infof("收到redis事件onPMessage:%s = %s = %s", pattern, channel, message);
	}

}

有晓得这个问题的么

4 回复

现在的问题是 时间过期后 没有收到

相关资料

redis 的key失效移除事件监听
  1. 事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发,故需要订
  阅 __keyevent@0__:expired 通道
  0表示db0 根据自己的dbindex选择合适的数字
  2. 修改 redis.conf 文件 
  修改 notify-keyspace-events Ex 
  3. 重启redis , 即可测试失效事件的触发, 监听获取的值为 key
  doc参考: http://redis.readthedocs.org/en/latest/topic/notification.html

@Rekoe redis并不会主动检测redis是否过期。。。

那就只能通过job来处理了!

添加回复
请先登陆
回到顶部