Help Center/ GeminiDB/ GeminiDB Redis API/ Best Practices/ GeminiDB Redis API for Online Classroom
Updated on 2025-05-07 GMT+08:00

GeminiDB Redis API for Online Classroom

Redis can be used to easily build an online classroom application with functions such as user authentication, course management, real-time message push, and online interaction. The following provides a basic architecture and implementation ideas of an online classroom application based on Redis, including data structure design and function module development. GeminiDB Redis API is completely compatible with Redis. You can use a GeminiDB Redis instance to build the application.

Data Structure Design

  • User information
    Store basic user information and authentication data.
    • Key: user:<user_id>
    • Value: user information (HASH data structure of Redis)

    Example:

    user:123 -> {name: "ZhangSan", email: "zhangsan@example.com", password_hash: "hashed_password"}
  • Course information
    Store basic information and metadata of a course.
    • Key: course:<course_id>
    • Value: course information (HASH data structure of Redis)

    Example:

    course:101 -> {title: "Introduction to Redis", description: "Learn the basics of Redis.", instructor: "LiSi"}
  • Association between a user and a course
    Record association between a user and a course.
    • Key: user:<user_id>:courses
    • Value: IDs of courses that a user has attended (SET data structure of Redis)
    Example:
    user:123:courses -> {101, 102}
    • Key: course:<course_id>:students
    • Value: IDs of users who have attended a course (SET data structure of Redis)

    Example:

    course:101:students -> {123, 456}
  • Instant messages
    Store instant messages and interactions in a course.
    • Key: course:<course_id>:messages
    • Value: messages in a course (LIST data structure of Redis)

    Example:

    course:101:messages -> ["ZhangSan: Hello everyone!", "LiSi: Welcome to the class!"]
  • User status
    Record user's status.
    • Key: user:<user_id>:online
    • Value: user status (STRING data structure of Redis: 1 indicates online and 0 offline.)

    Example:

    user:123:online -> 1

Functional Module Development

The following is an example of C++ code, which is implemented using C++ Redis client redis++.

  • User authentication

Store user and session information.

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;
}
  • Course management

Add and query course information.

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();
}
  • Association between a user and a course

Manage association between a user and a course.

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));
}
  • Instant messages

Push instant messages in a course.

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;
}
  • User status

Manage user's status.

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";
}