• 用redis做超时判断 感觉写的很有意思


    public Long getSessionIdByUserId(Long systemId, Long customerUserId) {
    if (customerUserId == null) {
    LoggerHelper.info(this.getClass(), "custom user id is null.");
    return DEFAULT_SESSION_ID;
    }

    Long sessionId = getSessionId(String.valueOf(customerUserId)); ------判断这用户是否有session的记录
    if (sessionId == null) { --------创建一条新的记录放入数据库 同时反馈出sessionid
    QuerySession session = new QuerySession(systemId, customerUserId);
    querySessionDao.save(session);

    sessionId = session.getId();
    }

    putSessionId(String.valueOf(customerUserId), sessionId, SESSION_EXPIRE_MINUTES); -----------比较意思的地方,把sessionid和超时时间放入redis

    return sessionId;
    }

    放入redis


    private void putSessionId(String userName, Long sessionId, int expireAfterMinutes) {
    if (userName == null || sessionId == null) {
    return;
    }
    ValueData valueData = new ValueData(sessionId, System.currentTimeMillis() + expireAfterMinutes * 60 * 1000); --------创建一条记录 sessionid 和 超时的时间点
    redisTemplate.boundHashOps(QUERY_SESSION_KEY).put(userName, valueData);
    }

    之后取redis判断函数

    private Long getSessionId(String userName) {
    ValueData value = (ValueData) redisTemplate.boundHashOps(QUERY_SESSION_KEY).get(userName);
    if (value == null) {
    return null;
    }
    // check if expire
    if (System.currentTimeMillis() > expireTimeMillion) { --------------验证是否过了这个时间点~~~
            redisTemplate.boundHashOps(QUERY_SESSION_KEY).delete(userName);
    return null;
    } else {
    return value.sessionId;
    }
    }

    模拟的超时请求~~~


  • 相关阅读:
    linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.
    linux下sudo命令
    myeclipse修改编译器版本的方法 .
    java 使用POI读写Excel文件(兼容2003、2007)
    Google.ProtocolBuffers.dll 之.Net应用(一)
    禁止Grid、TreeGrid列排序和列菜单
    在VS2008中加入ExtJS智能提示
    教程地址
    ExtJS xtype 一览
    ExtJS中,将Grid表头中的全选复选框取消复选
  • 原文地址:https://www.cnblogs.com/hexie/p/4988738.html
Copyright © 2020-2023  润新知