zoukankan      html  css  js  c++  java
  • 用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;
    }
    }

    模拟的超时请求~~~


  • 相关阅读:
    memcached +mysql+php 例子
    PHP利用memcache缓存技术提高响应速度
    实现QQ第三方登录教程(php)
    php如何解决多线程同时读写一个文件的问题
    php数组函数常见的那些
    PHP 5种方式获取文件后缀名
    函数与方程
    函数图像习题
    高中数学中需要重点关注的函数和图像
    特殊分段函数的图像画法
  • 原文地址:https://www.cnblogs.com/hexie/p/4988738.html
Copyright © 2011-2022 走看看