美文网首页
分布式会话实现(Springboot+redis)

分布式会话实现(Springboot+redis)

作者: YoSaukit | 来源:发表于2019-07-11 16:34 被阅读0次

    分布式会话实现(Springboot+redis)

    安装

    • 服务器上安装redis
      • redis官网找到最新下载链接,执行
          wget http://download.redis.io/releases/redis-5.0.5.tar.gz
      
      • 修改文件权限,解压
          chmod -R 777 redis-5.0.5.tar.gz
          tar -xvzf redis-5.0.5.tar.gz
      
      • 进入redis目录,使用make指令编译redis,使用make install命令安装redis
          cd redis-5.0.5
          make
          make install
      
      • 进入src目录,看到redis-server进程,执行./redis-server启动
          ./redis-server &
      
      • 使用./redis-cli默认连接本地端口6379的redis
          ./redis-cli
      
      • 测试redis
          set key name
          get key
      

    配置

    • 添加依赖
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
                <version>2.1.5.RELEASE</version>
            </dependency>
    
    • 创建RedisConfig类
      添加两个注解
        @Component
        @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
        public class RedisConfig {
    
        }
     
    
    • 配置springboot对redis的依赖
        #配置springboot对redis的依赖
        spring.redis.host=127.0.0.1
        spring.redis.port=6379
        spring.redis.database=10
        #spring.redis.password=
    
        #设置jedis连接池
        spring.redis.jedis.pool.max-active=50
        spring.redis.jedis.pool.min-idle=20
    
    • 报错DefaultSerializer requires a Serializable payload but received an object of type
      redis使用的序列化方式就是jdk默认的Serializable,因此要实现Serializable接口。
      更好的方式是使用JSON的序列化方式。
    • 服务器端redis目录下redis.conf修改配置,在#bind 127.0.0.1 ::1下增加
        bind *ip*
    

    redis应用

        @Autowired
        private RedisTemplate redisTemplate;
    
    • 把存入session修改成存入redis
        //修改成若用户登录验证成功后将对应的登录信息和登录凭证一起存入redis中
        //生成登录凭证token, UUID
        String uuidToken = UUID.randomUUID().toString();
        uuidToken = uuidToken.replace("-","");
        //建立token和用户登录态之间的联系
        redisTemplate.opsForValue().set(uuidToken,userModel);
        redisTemplate.expire(uuidToken,1, TimeUnit.HOURS);
    
    • 前端获取token
        var token = data.data;
        window.localStorage["token"] = token;
    
    • 后端校验token,并且读取用户model
            String token = httpServletRequest.getParameterMap().get("token")[0];
            if(StringUtils.isEmpty(token)){
                throw new BusinessException(EmBusinessError.USER_NOT_LOGIN, "用户还未登陆不能下单");
            }
            UserModel userModel = (UserModel) redisTemplate.opsForValue().get(token);    
    

    相关文章

      网友评论

          本文标题:分布式会话实现(Springboot+redis)

          本文链接:https://www.haomeiwen.com/subject/apmdkctx.html