redis:(session的解决方案)

1,web server最常用的缓存数据库  存在内存中

2,相比于mysql,访问速度快(内存和硬盘不是一个数量级的)

3,但是成本过高,可存储的数据更少。(内存的硬伤)

 

 

为何session适合redis?不用mysql

1,session 访问频繁,对性能要求极高。

2,session可不考虑断电丢失的问题。大不了重新登录。内存的硬伤

  • session持久化

  用于解决重启服务器后session就消失的问题。在数据库中存储session,而不是存储在内存中。通过包:express-mysql-session

3,session数据量不会太大。

 

为何网站数据不用session:

1,操作频率不是太高。相比于session

2,断电不能丢失。重要的数据。

3,数据大,内存成本高。

 

token:

1,只需解密token,便可得到用户信息。

2,token要手动存到localStoragy,添加到请求头。

3,session 进程数据不共享。token无需保留用户会话信息

4,token更适合大型项目。

const jwt = require('jsonwebtoken');
//生成token的方法
function  generateToken(data){
    let created = Math.floor(Date.now() / 1000);
    let cert = fs.readFileSync(path.join(__dirname, '../config/pri.pem'));//私钥
    let token = jwt.sign({
        data,
        exp: created + 3600 * 24
    }, cert, {algorithm: 'RS256'});
    return token;
}
//登录成功即返回加密token