一.Redis认知、安装与操作
(1).基础知识
硬盘数据库 访问相对慢 内存压力小 静态数据集合 非公共数据 网站的视图数据
(2).安装
https://www.runoob.com/redis/redis-install.html
(3).常用指令
(4).项目中安装依赖
npm i redis -S
(1).问题阐述
32位的服务器和64位的服务器进程存储空间是有限的,具体数值我忘了,也就是说空间有可能被占满,如果你又重新开辟一个进程也不行,是互相隔离的,
所以前端要把session存储在redis中进行保存是一种比较不错的解决方案
(2).session特性
(3).不适合redis
(4).koa2配置redis
koa-generice-session koa2操作session
npm i koa-redis koa-generic-session -S
三.打通cookie、session、redis
1.db_config中更改mysql配置为大写,redis_conf进行配置
REDIS_CONF:['6379','127.0.0.1']
2.redis_connect.js在connection文件夹中新建
const redis = require('redis'),
{REDIS_CONF} = require('../../config/db_config');
const red = redis.createClient(REDIS_CONF);
red.on('error',(error)=>{
console.error('Redis error'+error);
})
module.exports = red;
3.在Lib中新建redisClient
const red = require('../do/connection/redis_connect');
function redisSet(key, value, timeout= 60*60){
if(typeof(value) === 'object'){
value = JSON.stringify(value);
}
red.set(key,value);
red.expire(key,timeout)
}
function redisGet(key){
return new Promise((resolve,reject)=>{
red.get(key,(error,value)=>{
if(error){
reject(error);
return
}
if(value == null){
resolve(null);
return
}
try {
resolve(JSON.parse(value))
} catch (error) {
resolve(value)
}
})
})
}
module.exports={
redisSet,
redisGet
}
4.app.js中引入,书写配置项
app.keys = sessionInfo.keys;
app.use(session({
key:sessionInfo.name,
prefix:sessionInfo.prefix,
cookie:cookieInfo,
stroe:koaRedis(redisInfo)
}))
5.config.js中配置配置项
const {REDIS_CONF} = require('./db_config')
sessionInfo:{
keys:['a1!@hklhda*YUIYJK'],
name:'txclass.sid',
prefix:'txclass.sess'
},
cookieInfo:{
path:'/',
httpOnly:true,
maxAge:24*60*60*1000
},
redisInfo:{
all:`${REDIS_CONF[1]}:${REDIS_CONF[0]}`
}
6.配置环境,confing文件夹中建立,env_config.js
const ENV = process.env.NODE_ENV;
module.exports={
isDev:ENV === 'dev',
isPrd:ENV === 'production'
}
7.db_config更改
const ENV = require('./env_config')
module.exports ={
mysql:{
base:{
host:'localhost',
dialect:'mysql',
pool:{
max:5,
min:0,
idle:10000
}
},
conf:['txclass','root',ENV.isPrd ? 'xxx':'123456']
},
REDIS_CONF:['6379','127.0.0.1']
}
8.安装ejs
npm i ejs -S
9.更改app.js
app.use(views(__dirname + '/views', {
extension: 'ejs'
}))
10.views文件夹中建立Index.ejs
11.route文件夹中建立index.js
const router = require('koa-router')(),
indexController = require('../controller/index')
router.get('/',indexController.index )
module.exports = router
12.controller中新建一个index.js
class Index{
async index(ctx,next){
const sess = ctx.session;
if(!sess.uid){
sess.uid = 1;
sess.userName = 'zza';
sess.nikeName = 'js++';
sess.gender = 'male'
}
ctx.body={
session:sess
}
}
}
module.exports = new Index();
12.app.js中配置
const indexRouter = require('./routes/index')
app.use(indexRouter.routes(), indexRouter.allowedMethods())