不同操作系统中安装Redis
https://blog.csdn.net/m0_65096391/article/details/149471678
Redis列表操作
https://blog.csdn.net/shulianghan/article/details/129085961
使用Node操作Redis
https://blog.51cto.com/u_16213388/12334789
视频收藏功能实现
model\videoCollectModel.js
新建视频收藏Model
javascript
const mongoose = require('mongoose');
const baseSchema = require('./baseModel');
const videocollectSchema = new mongoose.Schema({
video: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Video',
},
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User',
},
...baseSchema,
});
module.exports = videocollectSchema;
model\index.js
javascript
VideoCollect: mongoose.model('VideoCollect', require('./videoCollectModel')),
router\video.js
新建收藏视频路由
javascript
// 收藏视频
router.post('/collect/:videoId', verifyToken(), videoController.collectVideo);
controller\videoController.js
实现收藏视频逻辑
javascript
// 收藏视频
exports.collectVideo = async (req, res) => {
var { videoId } = req.params;
var userId = req.user.user._id;
try {
var video = await Video.findById(videoId);
if (!video) {
return res.status(404).send({
code: 404,
message: '视频不存在',
});
}
// 是否已收藏
var isCollect = await VideoCollect.findOne({
video: videoId,
user: userId,
});
if (isCollect) {
return res.status(400).send({
code: 400,
message: '已收藏',
});
}
// 收藏视频
const videoCollectModel = new VideoCollect({
video: videoId,
user: userId,
});
await videoCollectModel.save();
res.status(200).send({
code: 200,
message: '收藏成功',
data: videoCollectModel,
});
} catch (error) {
console.log('error', error);
res.status(500).send({
code: 500,
message: '收藏失败',
data: error,
});
}
};

实现视频热门推荐机制
config\config.default.js
redis 连接配置
javascript
module.exports.redisClient = {
path: '127.0.0.1', //192.168.0.106
port: 6379,
options: {}, //password: 'root'
};
model\redis\index.js
创建 redis 连接工具类
javascript
const Redis = require('ioredis');
const { redisClient } = require('../../config/config.default');
const redis = new Redis({
port: redisClient.port,
host: redisClient.path,
});
redis.on('connect', () => {
console.log('redis连接成功');
});
redis.on('error', (err) => {
if (err) {
console.log('redis连接失败');
console.log(err);
redis.quit();
}
});
module.exports = redis;
model\redis\redishotsinc.js
实现视频热度管理
javascript
const redis = require('./index');
exports.hotInc = async (videoId, incNum) => {
var data = await redis.zscore('hot_video', videoId);
if (data) {
var inc = await redis.zincrby('hot_video', incNum, videoId);
} else {
var inc = await redis.zadd('hot_video', incNum, videoId);
}
return inc;
};
controller\videoController.js
在视频点赞、评论、收藏、获取视频详情成功后调用视频热度管理工具函数




获取推荐的热门视频
model\redis\redishotsinc.js
从 redis 获取热门视频
javascript
// 获取热门视频
exports.topHots = async (num) => {
var data = await redis.zrevrange('hot_video', 0, -1, 'withscores');
var newarr = data.slice(0, num * 2);
var obj = {};
for (let i = 0; i < newarr.length; i++) {
if (i % 2 === 0) {
obj[newarr[i]] = newarr[i + 1];
}
}
return obj;
};
router\video.js
创建获取热门视频路由
javascript
// 获取热门视频
router.get('/tophots/:num', videoController.topHots);
controller\videoController.js
实现获取热门视频逻辑
javascript
// 获取热门视频
exports.topHots = async (req, res) => {
var { num = 10 } = req.params;
try {
var dbBack = await topHots(num);
res.status(200).send({
code: 200,
message: '获取热门视频成功',
data: dbBack,
});
} catch (error) {
res.status(500).send({
code: 500,
message: '获取热门视频失败',
data: error,
});
}
};
