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