session是server端存储用户信息

用session时,如果访问量过大的话,不能只放在进程内存中 ,不然可能会撑爆内存
而且如果session放在进程内存中,在多进程时,因为进程之间内存不共享 所有有可能会查不到

解决方法之一就是使用redis

redis是web server常用的缓存数据库,数据在内存中
相比于mysql,访问速度更快(因为一个是内存中,一个是硬盘中)
用redis他是脱离web server的,就想web server跟mysql之间的关系一样 node的进程内存和redis内存不是相同的

redis可以简单理解为放在内存中的mysql数据库

session为什么用redis

session要放在redis中是因为session访问频繁,在内存中一定比磁盘强
session可以不考虑断电丢失的问题(内存只要断电就清空数据了)
session的数据量不会很大

反之,那些 操作要求不频繁的,数据量大的,而且要求断电也得存在的数据 不能用内存

redis安装教程

https://www.runoob.com/redis/redis-install.html

redis最基本操作

这句话在redis文件夹下启动cmd 输入 算是一种启动服务器

redis-server.exe redis.windows.conf

redis会话 redis里面的session_redis会话

在redis文件夹下另起一个cmd 输入 就是访问
到了启动的服务器了

redis-cli.exe -h 127.0.0.1 -p 6379

redis会话 redis里面的session_redis会话_02

set 变量 值      回车后会回复 ok 说明声明设置成功
get 变量      回车后会得到 变量对应的值
del 变量    回车后会删除 该变量
keys *    回车后 会返回所有的当前存储的变量

redis会话 redis里面的session_session_03

用的方法和node连接mysql差不多 需要导入一个模块

const redis = require('redis');

用这个里提供的 get set 等函数就能直接操作redis

const redis = require('redis');

//创建客户端
const redisClient = redis.createClient(6379,'127.0.0.1');//连接端口  就跟数据库一样 只不过比较简便
redisClient.on('error',err => {
    console.error(err);
});

//测试
redisClient.set('myname','zhangesan2',redis.print);//redis.print是返回set操作的操作的结果  就比如 OK
//set 可以传三个参数
redisClient.get('myname',(err,val) => {
    if(err){
        console.error(err);
        return
    }
    console.log('val ',val);

    //退出
    redisClient.quit()
});
//get传两个 第二个是回调函数

大部分时间对于redis也只是用到set 和 get 因为平时只是做增删改查 改和增用set 删除一般只做假删除 查用get