Jedis 设置key的超时时间

一分钟之内只能发送一次短信,

若用户刷新页面,然后输入原来的手机号,则继续计时

方案:服务器端要记录时间戳

方法名: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值