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文件夹下另起一个cmd 输入 就是访问
到了启动的服务器了
redis-cli.exe -h 127.0.0.1 -p 6379
set 变量 值 回车后会回复 ok 说明声明设置成功
get 变量 回车后会得到 变量对应的值
del 变量 回车后会删除 该变量
keys * 回车后 会返回所有的当前存储的变量
用的方法和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