java 限制每隔15分钟才允许执行一次程序
由于公司订餐平台,有个用户催单业务,每当用户点击催单按钮时,商家就会收到消息提示,如果用户频繁的发起催单请求,这样商家就会不停的收到消息提醒,所以想限制用户至少每隔15分钟才可以催单一次 我采取了以下解决方式
用redis 解决这个问题 代码如下
private static final String keyword_order_orderNo = "order:reminder:orderNo";//key
/** * 删除少于当前 前15分钟的数据 * @param key */ private void deleteExpired(String key) { try { long currentTime = System.currentTimeMillis() / 1000; jedisClient.zremrangeByScore(key, 0, currentTime - (15 * 60)); } catch (Exception e) { e.printStackTrace(); } }
/** * 入口 */ @RedisSubscribe(channel = "order:message:reminder") public void entrance(String channel, String message) { LOGGER.info("SendOrderReminderListener:[{}]", message); try { Order order = JSON.parseObject(message, Order.class); deleteExpired(keyword_order_orderNo); Double zscore = jedisClient.zscore(keyword_order_orderNo, order.getOrderNo()); if (zscore == null) {//15分钟过后才可以执行该方法 sendOrderReminder(order); jedisClient.zadd(keyword_order_orderNo, new Date().getTime() / 1000, order.getOrderNo()); } } catch (Exception e) { LOGGER.error("用户催单模板消息出错啦", e); } }