适合用来存储用户登录信息,存储执行任务的信息。
多进程内存模型
多核 CPU 擅长处理多进程任务,所有 web server 也都是多进程的,无论 PM2 、nginx 还是其他.但进程之间有内存隔离(操作系统的基本功能),所以需要第三方缓存服务。
比如用户第一次访问进入的是进程1,第二次访问进入的是进程2,因为进程之前的数据是隔离的。所以redis缓存就显得特别重要。
安装
安装npm redis插件 https://www.npmjs.com/package/redis ,参考代码。
启动服务端
后台启动 ```javascript brew services start redis
brew services stop redis
- **前台启动**
```javascript
redis-server // 它是个可执行文件
node项目中添加redis缓存
- 配置redis客户端 ```javascript redisConf= { port: “6379”, host: “127.0.0.1”, }
```javascript
const { port, host, password } = redisConf;
const opt = {};
if (password) {
opt.password = password; // prd 环境需要密码
}
const redisClient = createClient(port, host, opt);
redisClient.on("error", (err) => console.log("Redis Client Error", err));
module.exports = redisClient;
- 封装缓存方法 ```javascript const redisClient = require(‘../db/redis’)
/**
- redis set
- @param {string} key key
- @param {string|Object} val val
- @param {number} timeout 过期时间,单位 s ,默认 1h
/
function cacheSet(key, val, timeout = 60 60) {
let formatVal
if (typeof val === ‘object’) {
} else {formatVal = JSON.stringify(val)
} redisClient.set(key, formatVal) redisClient.expire(key, timeout) //设置缓存时间,默认一小时 }formatVal = val
/**
- redis get
@param {string} key key */ function cacheGet(key) { const promise = new Promise((resolve, reject) => {
redisClient.get(key, (err, val) => {
if (err) {
reject(err)
return
}
if (val == null) {
resolve(null)
return
}
try {
resolve(JSON.parse(val))
} catch (ex) {
resolve(val)
}
})
}) return promise }
module.exports = { cacheSet, cacheGet, }
- 测试redis缓存读写正常
```javascript
const { cacheGet, cacheSet } = require('../cache/index')
// 测试数据库连接
router.get('/api/db-check', async (ctx, next) => {
// 测试 redis 连接
cacheSet('name', 'biz editor sever OK - by redis')
const redisTestVal = await cacheGet('name')
ctx.body = {
errno: 0,
data: {
// ENV,
redisConn: redisTestVal != null,
},
}
})