分布式會(huì)話(huà)實(shí)現(xiàn)(Springboot+redis)

分布式會(huì)話(huà)實(shí)現(xiàn)(Springboot+redis)

安裝

  • 服務(wù)器上安裝redis
    • redis官網(wǎng)找到最新下載鏈接,執(zhí)行
        wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    
    • 修改文件權(quán)限,解壓
        chmod -R 777 redis-5.0.5.tar.gz
        tar -xvzf redis-5.0.5.tar.gz
    
    • 進(jìn)入redis目錄,使用make指令編譯redis,使用make install命令安裝redis
        cd redis-5.0.5
        make
        make install
    
    • 進(jìn)入src目錄,看到redis-server進(jìn)程,執(zhí)行./redis-server啟動(dòng)
        ./redis-server &
    
    • 使用./redis-cli默認(rèn)連接本地端口6379的redis
        ./redis-cli
    
    • 測(cè)試redis
        set key name
        get key
    

配置

  • 添加依賴(lài)
        <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>
  • 創(chuàng)建RedisConfig類(lèi)
    添加兩個(gè)注解
    @Component
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
    public class RedisConfig {

    }
 
  • 配置springboot對(duì)redis的依賴(lài)
    #配置springboot對(duì)redis的依賴(lài)
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.database=10
    #spring.redis.password=

    #設(shè)置jedis連接池
    spring.redis.jedis.pool.max-active=50
    spring.redis.jedis.pool.min-idle=20
  • 報(bào)錯(cuò)DefaultSerializer requires a Serializable payload but received an object of type
    redis使用的序列化方式就是jdk默認(rèn)的Serializable,因此要實(shí)現(xiàn)Serializable接口。
    更好的方式是使用JSON的序列化方式。
  • 服務(wù)器端redis目錄下redis.conf修改配置,在#bind 127.0.0.1 ::1下增加
    bind *ip*

redis應(yīng)用

    @Autowired
    private RedisTemplate redisTemplate;
  • 把存入session修改成存入redis
    //修改成若用戶(hù)登錄驗(yàn)證成功后將對(duì)應(yīng)的登錄信息和登錄憑證一起存入redis中
    //生成登錄憑證token, UUID
    String uuidToken = UUID.randomUUID().toString();
    uuidToken = uuidToken.replace("-","");
    //建立token和用戶(hù)登錄態(tài)之間的聯(lián)系
    redisTemplate.opsForValue().set(uuidToken,userModel);
    redisTemplate.expire(uuidToken,1, TimeUnit.HOURS);
  • 前端獲取token
    var token = data.data;
    window.localStorage["token"] = token;
  • 后端校驗(yàn)token,并且讀取用戶(hù)model
        String token = httpServletRequest.getParameterMap().get("token")[0];
        if(StringUtils.isEmpty(token)){
            throw new BusinessException(EmBusinessError.USER_NOT_LOGIN, "用戶(hù)還未登陸不能下單");
        }
        UserModel userModel = (UserModel) redisTemplate.opsForValue().get(token);    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容