node 写一个redis缓存mongo案列
时间: 2023-11-04 20:30:23 浏览: 154
好的,这里是一个基于Node.js、MongoDB和Redis的简单缓存实现示例:
```
const express = require('express');
const mongoose = require('mongoose');
const redis = require('redis');
const util = require('util');
// 创建Express应用
const app = express();
// 连接MongoDB
mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true });
const db = mongoose.connection;
// 定义数据模型
const UserSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
const User = mongoose.model('User', UserSchema);
// 连接Redis
const client = redis.createClient();
client.get = util.promisify(client.get);
// 定义路由
app.get('/users/:id', async (req, res) => {
const { id } = req.params;
// 先从Redis中查找数据
const cachedUser = await client.get(`user:${id}`);
if (cachedUser) {
console.log('从Redis缓存中获取用户数据');
return res.send(JSON.parse(cachedUser));
}
// 如果Redis中不存在,则从MongoDB中查找数据
const user = await User.findById(id);
if (!user) {
return res.status(404).send('用户不存在');
}
// 将数据存入Redis缓存
console.log('从MongoDB中获取用户数据');
client.set(`user:${id}`, JSON.stringify(user), 'EX', 60); // 缓存60秒
res.send(user);
});
// 启动应用
app.listen(3000, () => console.log('服务器已启动'));
```
该示例中,我们使用了`mongoose`库连接MongoDB,并定义了一个名为`User`的数据模型。在路由中,我们先从Redis缓存中查找数据,如果存在则直接返回,否则从MongoDB中查找数据并将其存入Redis缓存。在存入Redis缓存时,我们使用了`EX`选项来设置过期时间。
需要注意的是,该示例只是一个简单的实现,实际应用中还需要考虑缓存穿透、缓存雪崩等问题,对缓存进行更加细致的控制。
阅读全文