Redis 与其他 key - value 缓存产品有以下三个特点:
* Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
* Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
* Redis支持数据的备份,即master-slave模式的数据备份。
1.安装redis
直接下载安装redis或用命令行安装。
npm install redis -g
2.启动redis
进入到安装redis中的目录中。
redis-server
出现以下情况就说明redis启动成功。
3.在koa中安装 redis koa-redis koa-generic-session三个依赖包。
npm i redis koa-redis koa-generic-session --save
4.在koa项目中建立config.js和redis.js。
//config.js
//redis服务的地址
let REDIS_CONF = {
port: 6379,
host: '127.0.0.1'
}
module.exports ={
REDIS_CONF
}
//redis.js
//引入依赖
const redisStore = require('koa-redis')
const redis = require('redis')
const {REDIS_CONF} = require('./config')
//进行配置
const client = redis.createClient(REDIS_CONF.port, REDIS_CONF.host);
const options = {client: client, db: 1};
const store = redisStore(options);
//封装了简单的set和get方法,其余方法可查文档http://www.360doc.com/content/15/0328/12/5054188_458684113.shtml
const setRedis = (key, val, timeout = 60*60) =>{
if(typeof val == 'object'){
//
val = JSON.stringify(val)
}
client.set(key, val)
client.expire(key,timeout)
}
const getRedis = (key) => {
return new Promise((resolve, reject)=>{
client.get(key,(err,val)=>{
if(err) {
reject(err)
return
}
if(val == null) {
resolve(null)
return
}
try {
resolve(
JSON.parse(val)
)
} catch (error) {
resolve(val)
}
})
})
}
module.exports = {
store,
setRedis,
getRedis
}
在app.js中加入如下代码
//引入依赖和配置
const session = require('koa-generic-session')
const {store} = require('./config/redis/redis')
//session做加密处理
app.keys = ['keys','keyskeys']
app.use(session({
// key:'weibo.sid',//cookie的name,默认是koa.sid
// prefix:'weibo:sess',//redis key的前缀,默认是koa:sess
// cookie:{
// path:'/',
// httpOnly:true,//表示key(weibo.sid)这个值只能在server端修改,不能在客户端修改
// maxAge:24*60*60*1000, //cookie的过期时间,登录的过期时间
// },
// ttl:24*60*60*1000,//redis的过期时间,默认和cookie过期时间保持一致
store:store
}))
5.使用实例
const {store,setRedis,getRedis} = require('../config/redis/redis')
const studentQuery = async (ctx) => {
const pageSize =ctx.request.body.pageSize?parseInt(ctx.request.body.pageSize):3;
await setRedis("pageSize", 2);
const the_pagesize = await getRedis("pageSize")
console.log(the_pagesize)
ctx.body = {
code:200,
data:the_pagesize,
desc:'成功'
}
};