一分钟之内只能发送一次短信,
若用户刷新页面,然后输入原来的手机号,则继续计时
方案:服务器端要记录时间戳
方法名:sMSWaitingTime
功能:返回倒计时剩余时间,单位秒
/***
* 倒计时还剩余多长时间
* @param mobile : 手机号
* @return : second
*/
public int sMSWaitingTime(String mobile) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
RedisHelper rdsHelper = RedisHelper.getInstance();
String cid = getCid(request, response);
String lastSendSMSTime = rdsHelper.getCache(cid+mobile);//getKeyCache(request, response, mobile) ;
if(StringUtil.isNullOrEmpty(lastSendSMSTime)) {
saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()),60);
return 0;
} else {
long lastSendSMSTimeSecond=Long.parseLong(lastSendSMSTime);
long currentTimeSecond=DateTimeUtil.getCurrentTimeSecond();
int delter=(int) (currentTimeSecond-lastSendSMSTimeSecond);
System.out.println("delter:"+delter);
if(delter>=60){
return 0;
}else{
return 60-delter;
}
}
}
jedis 可以设置key的超时时间:
public /*synchronized*/ void saveExpxKeyCache(HttpServletRequest request, HttpServletResponse response, String k, String v,long time) {
String cid = getCid(request, response);
// logger.debug("cid is " + cid);
// logger.debug("set " + k + " to value : " + v);
RedisHelper helper = RedisHelper.getInstance();
helper.saveExpxKeyCache(cid+k, v,time);
// jedis.hset(httpSession.getId(), k, v);
// jedis.expire(httpSession.getId(), 3600);
}
/***
* Only set the key if it does not already exist
*
* @param k
* @param v
* @param time : second
*/
public void saveExpxKeyCache(String k, String v, long time) {
saveExpxKeyCache(k, v, "NX", time);
}
/***
* @param k
* @param v
* @param nxxx : NX|XX, NX -- Only set the key if it does not already exist. XX -- Only set the key
* if it already exist.
* @param time : second
*/
public void saveExpxKeyCache(String k, String v, String nxxx, long time) {
Jedis jedis = Const.pool.getResource();
try {
jedis.set(k, v, nxxx, "EX"/*seconds*/, time);
} catch (Exception e) {
e.printStackTrace();
logger.error("saveKeyCache", e);
Const.pool.returnBrokenResource(jedis);
jedis = null;
} finally {
if (jedis != null) {
Const.pool.returnResource(jedis);
}
}
}
参考:
http://hw1287789687.iteye.com/blog/2225130