【node.js】学习篇:如何在koa2项目中使用redis
【node.js】学习篇:如何在koa2项目中使用redis
首先我们电脑上需要安装 node.js
这是我在写着个笔记的时候,当前的系统的node版本,仅供参考
node -v
v14.19.1
这里默认你已经有一定的node基础,并且已经拥有了 Koa2 项目
安装 redis
npm i redis -D
然后还需要安装下面的依赖:
// koa 项目连接 redis 需要的依赖
npm i koa-redis --save
// koa 项目生成 session 的工具
npm i koa-generic-session --save
编写存储配置:
在 src目录下 新建一个 conf 文件夹 然后新建db.js文件 并写入如下配置:
这样做的意义是方便统一管理
/**
* @description redis 存储配置
* @author mosaic
*/
const REDIS_CONF = {
port: 6379,
host: '127.0.0.1'
}
module.exports = REDIS_CONF
建立连接:
在 src目录下 新建一个cache文件夹 然后新建一个_redis.js
文件,并写入如下代码:
/**
* @description 链接 redis 的方法 get set
* @author mosaic
*/
const redis = require('redis')
const { REDIS_CONF } = require('../conf/db')
// 创建客户端
const redisClient = redis.createClient(REDIS_CONF.port.REDIS_CONF.host)
redisClient.on(() => {
console.log('123 :>> ', 123)
})
定义 redis 的set操作函数:
/**
*
* set
* @param {string} key 键
* @param {string} val 值
* @param {number} [timeout=60 * 60] 过期时间 单位s
*/
const set = (key, val, timeout = 60 * 60) => {
// 这里需要判断一下,如果传递的val值是对象,我们需要将其转换为json字符串再进行存储
if (typeof val === 'object') {
val = JSON.stringify(val)
}
redisClient.set(key, val)
redisClient.expire(key, timeout)
}
定义 redis 的 set 操作函数:
/**
*
* get
* @param {string} key
* @return {promise}
*/
const get = (key) => {
// 因为涉及到IO操作,所以是异步处理,需要用promise包装一下
const promise = new Promise((resolve, reject) => {
redisClient.get(key, (err, val) => {
if (err) {
reject(err)
}
if (val == null) {
resolve(val)
}
try {
resolve(JSON.parse(val))
} catch (error) {
resolve(val)
}
})
})
return promise
}
随后就可以导出使用了:
module.exports = {
set,
get
}
引入使用:
我们需要来到 app.js 中引依赖,并注册中间件。
// app.js
...
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
const REDIS_CONF = require('./conf/db')
...
// 注册 redis 中间件的方法要写在路由的上面
// session
app.keys = ['UfBhjR#!A@_$343'] // 密匙 负责加密session信息
app.use(
session({
key: 'user.sid', // 键
prefix: 'user:session:', // 前缀
cookie: {
path: '/', // 允许客户端哪些路径使用
httpOnly: true, // 只允许在session端修改cookie
maxAge: 24 * 60 * 60 * 1000 // 过期时间
},
store: redisStore({
all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
})
})
)
//routes
app.use(index.routes(), index.allowedMethods())
...
测试是否生效:
这时候我们就可以来到routers文件夹下的 index.js 去编写代码,测试session是否生效了
// routers/index.js
// 写入下面 + 号后的代码
...
router.get('/json', async (ctx, next) => {
+ const sessionVal = ctx.session
+ if (sessionVal.viewNum == null) {
+ sessionVal.viewNum = 0
+ }
+ sessionVal.viewNum++
ctx.body = {
title: 'koa2 json',
+ viewNum: sessionVal.viewNum
}
})
...
之后我们启动项目,去访问对应的 json 路由:
可以看到,我们的session已经成功生效。至此,简单的配置完毕。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?