机制Java 利用 Redis 实现超时机制(redisjava过期)
Redis是一款开源、内存型非关系型数据库,常用作实现分布式session缓存、实现超时机制等。下文将介绍通过Java编程实现基于Redis的超时机制的步骤,完成超时的监控工作和后续的处理工作。
### 一、准备工作
1.用户在注册帐号或者有关操作时,均要设置一个超时时间,Redis缓存的超时时间默认为0000即不过期。
2.当用户的操作超过设定的时间时,Redis将发送一个过期消息。
3.设置一个监听Redis消息的线程,以及一个扫描超时任务列表,并处理其中超时任务的线程。
### 二、 Java编程实现
1.获取Redis连接
首先要获取Redis的连接,并将其存储在Jedis连接池中,方便后续的复用。
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxActive); config.setMaxIdle(maxIdle);
config.setMaxWaitMillis(maxWait); config.setTestOnBorrow(true);
config.setTestOnReturn(true); JedisPool pool = new JedisPool(config, host, port);
try { // 从连接池取出,然后做自己想做的事情
Jedis jedis = pool.getResource(); }
2.处理Redis消息
针对超时消息,在程序中开启一个线程(比如就叫ReidsListenerThread),它会监听Redis消息,当收到超时消息之后,就会把超时任务封装为一个object对象,存放到缓存列表中。
public static void main(String[] args) throws InterruptedException {
Jedis conn = new Jedis("127.0.0.1"); // 建立连接 Thread t = new RedisListenerThread(conn); // 新建一个监听线程
t.start(); // 启动线程 }
public void handleMessage(String channel, String message){ Object object = getObject(channel); // 获取消息中包含的任务
addTaskToList(list, object); // 把任务加入到任务列表中,进行后续处理}
3.处理超时任务
另外开启一个线程,来定时扫描任务列表,检查哪些任务已经超时,将其从任务列表中移除,然后做一些处理,比如发邮件之类的:
public static void main(String[] args) throws InterruptedException {
Jedis conn = new Jedis("127.0.0.1"); // 建立连接 Thread t = new RedisTaskThread(conn); // 新建一个任务处理线程
t.start(); // 启动线程 }
public void handleTask(Object object){ removeTaskFromList(list, object); // 从任务列表中移除此超时任务
doSomething(object); // 执行超时任务的具体操作 sendMail(object); // 发邮件通知
}
### 通过上面的示例,大家可以借鉴,以实现Java语言编程实现基于Redis的超时机制。准备工作做好后,需要实现的就是监听Redis消息的线程和处理超时任务的线程,在实现过程中,只需要结合Jedis官网上的API来完成,即可顺利实现Java编程实现基于Redis的超时机制。