由於公司訂餐平台,有個用戶催單業務,每當用戶點擊催單按鈕時,商家就會收到消息提示,如果用戶頻繁的發起催單請求,這樣商家就會不停的收到消息提醒,所以想限制用戶至少每隔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); } }