文档首页/ 云数据库 GeminiDB/ GeminiDB Redis接口/ 最佳实践/ GeminiDB Redis 在线课堂的应用
更新时间:2025-07-02 GMT+08:00

GeminiDB Redis 在线课堂的应用

使用Redis可以轻松构建一个在线课堂应用,实现诸如用户认证、课程信息管理、实时消息推送、在线互动等功能。以下是一个基于Redis的在线课堂应用的基本架构和实现思路,包括数据结构设计、功能模块实现。GeminiDB Redis100%兼容Redis协议,您可以使用GeminiDB Redis进行尝试搭建。

数据结构设计

  • 用户信息
    存储用户的基本信息和认证数据。
    • Key:user:<user_id>
    • Value:用户信息(使用 Redis 的 "HASH" 数据结构)。

    示例:

    user:123 -> {name: "ZhangSan", email: "zhangsan@example.com", password_hash: "hashed_password"}
  • 课程信息
    存储课程的基本信息和元数据。
    • Key:course:<course_id>
    • Value:课程信息(使用Redis的 "HASH" 数据结构)。

    示例:

    course:101 -> {title: "Introduction to Redis", description: "Learn the basics of Redis.", instructor: "LiSi"}
  • 用户课程关系
    记录用户与课程的关联关系。
    • Key:user:<user_id>:courses
    • Value:用户参加的课程ID集合(使用Redis的"SET"数据结构)。
    示例:
    user:123:courses -> {101, 102}
    • Key:course:<course_id>:students
    • Value:参加该课程的用户ID集合(使用Redis的"SET"数据结构)。

    示例:

    course:101:students -> {123, 456}
  • 实时消息
    存储课程中的实时消息和互动内容。
    • Key:course:<course_id>:messages
    • Value:课程中的消息列表(使用Redis的"LIST"数据结构)。

    示例:

    course:101:messages -> ["ZhangSan: Hello everyone!", "LiSi: Welcome to the class!"]
  • 在线状态
    记录用户的在线状态。
    • Key:user:<user_id>:online
    • Value:在线状态(使用Redis的"STRING"数据结构,值为"1"表示在线,"0"表示离线)。

    示例:

    user:123:online -> 1

功能模块实现

以下示例代码使用 C++的redis客户端redis++实现。

  • 用户认证

使用 Redis 存储用户信息和会话信息。

void registerUser(int user_id, const std::string& name, const std::string& email, const std::string& password_hash) {
    redis.hset("user:" + std::to_string(user_id), "name", name);
    redis.hset("user:" + std::to_string(user_id), "email", email);
    redis.hset("user:" + std::to_string(user_id), "password_hash", password_hash);
}
 
bool loginUser(int user_id, const std::string& password_hash) {
    std::string stored_password_hash = redis.hget("user:" + std::to_string(user_id), "password_hash").value();
    return stored_password_hash == password_hash;
}
  • 课程管理

添加和查询课程信息。

void addCourse(int course_id, const std::string& title, const std::string& description, const std::string& instructor) {
    redis.hset("course:" + std::to_string(course_id), "title", title);
    redis.hset("course:" + std::to_string(course_id), "description", description);
    redis.hset("course:" + std::to_string(course_id), "instructor", instructor);
}
 
std::string getCourseTitle(int course_id) {
    return redis.hget("course:" + std::to_string(course_id), "title").value();
}
  • 用户课程关系

管理用户与课程的关系。

void enrollUserInCourse(int user_id, int course_id) {
    redis.sadd("user:" + std::to_string(user_id) + ":courses", std::to_string(course_id));
    redis.sadd("course:" + std::to_string(course_id) + ":students", std::to_string(user_id));
}
 
bool isUserEnrolledInCourse(int user_id, int course_id) {
    return redis.sismember("user:" + std::to_string(user_id) + ":courses", std::to_string(course_id));
}
  • 实时消息推送

支持课程中的实时消息。

void sendMessageToCourse(int course_id, const std::string& message) {
    redis.rpush("course:" + std::to_string(course_id) + ":messages", message);
}
 
std::vector<std::string> getCourseMessages(int course_id) {
    std::vector<std::string> output;
    redis.lrange("course:" + std::to_string(course_id) + ":messages", 0, -1, std::inserter(output, output.end()));
    return output;
}
  • 在线状态

管理用户的在线状态。

void setOnlineStatus(int user_id, bool online) {
    redis.set("user:" + std::to_string(user_id) + ":online", online ? "1" : "0");
}
 
bool isUserOnline(int user_id) {
    std::string status = redis.get("user:" + std::to_string(user_id) + ":online").value();
    return status == "1";
}