class RedisForCourse: """ 封装有关课程的数据库操作 key format: STATUS:COURSE:COURSE_ID:xxx 存储的是一个lesson_id 表示当前课程最近一堂课的lesson_id """ __PRIMARY_KEY = 'COURSE_ID' __TABLE_NAME = 'COURSE' __PREFIX = REDIS_DB_NAME + ':' + __TABLE_NAME + ':' + __PRIMARY_KEY def __init__(self): self.__conn = Redis().conn def updateLesson(self, course_id, lesson_id): """ 插入一条课程状态记录 :param course_id: 课程唯一标识 :param lesson_id: 课程下课堂唯一标识 :return: """ # format: STATUS:COURSE:COURSE_ID:xxx key = self.__PREFIX + ':' + str(course_id) self.__conn.set(key, lesson_id) def getLastlyLessonID(self, course_id): """ 获取课程最近一堂课的lesson_id :param course_id: 课程唯一标识 :return: """ # format: STATUS:COURSE:COURSE_ID:xxx key = self.__PREFIX + ':' + str(course_id) return self.__conn.get(key)
class RedisForOnlineList: """ 封装有关课堂在线列表的数据库操作 key format: STATUS:ONLINE_LIST:ID:(lesson_id)_(uid) 存储的是一个uid 这个key的用法实际上并不是很好,但是能实现需求 """ # 主键是由lesson_id与uid组成,中间通过下划线连接 __PRIMARY_KEY = 'ID' __TABLE_NAME = 'ONLINE_LIST' __PREFIX = REDIS_DB_NAME + ':' + __TABLE_NAME + ':' + __PRIMARY_KEY def __init__(self): self.__conn = Redis().conn def refresh(self, lesson_id, uid): """ 刷新用户状态,即重置key的存活时间 :param lesson_id: 课程下课堂唯一标识 :param uid: 用户唯一标识 :return: """ # format: STATUS:ONLINE_LIST:ID:(lesson_id)_(uid) key = self.__PREFIX + ':' + str(lesson_id) + '_' + str(uid) self.__conn.setex(name=key, value=uid, time=5) def getOnlineList(self, lesson_id): """ 获取该课堂在线的uid列表 :param lesson_id: 课程下课堂唯一标识 :return: """ online_list = [] key_list = self.__conn.keys(self.__PREFIX + ':' + str(lesson_id) + '_*') for key in key_list: online_list.append(self.__conn.get(key)) return online_list
class RedisForCourseStatus: """ 封装有关课程的各种状态的数据库操作 key format: STATUS:COURSE_STATUS:COURSE_ID:xxx 存储的是一个值CourseStatus(参考edu.py) """ __PRIMARY_KEY = 'COURSE_ID' __TABLE_NAME = 'COURSE_STATUS' __PREFIX = REDIS_DB_NAME + ':' + __TABLE_NAME + ':' + __PRIMARY_KEY def __init__(self): self.__conn = Redis().conn def createCourse(self, course_id): """ 插入一条课堂状态记录 :param course_id: 课程唯一标识 :return: """ # format: STATUS:COURSE_STATUS:COURSE_ID:xxx key = self.__PREFIX + ':' + str(course_id) self.__conn.set(key, CourseStatus.OffLine) def getCourseStatus(self, course_id): """ 获取当前课程状态 :param course_id: 课程唯一标识 :return: """ # format: STATUS:COURSE_STATUS:COURSE_ID:xxx key = self.__PREFIX + ':' + str(course_id) if not self.__conn.exists(key): self.createCourse(course_id=course_id) return int(self.__conn.get(key)) def offLine(self, course_id): """ 课堂结束 :return: """ # format: STATUS:LESSON_STATUS:ID:xxx key = self.__PREFIX + ':' + str(course_id) self.__conn.set(key, CourseStatus.OffLine) def onLine(self, course_id): """ 正在上课 :return: """ # format: STATUS:LESSON_STATUS:ID:xxx key = self.__PREFIX + ':' + str(course_id) self.__conn.set(key, CourseStatus.OnLine) def cantJoinIn(self, course_id): """ 课堂不可中途加入 :return: """ # format: STATUS:LESSON_STATUS:ID:xxx key = self.__PREFIX + ':' + str(course_id) self.__conn.set(key, CourseStatus.CantJoinIn) def waiting(self, course_id): """ 在房间等待中,未开始上课 :return: """ # format: STATUS:LESSON_STATUS:ID:xxx key = self.__PREFIX + ':' + str(course_id) self.__conn.set(key, CourseStatus.Waiting)
class RedisForUserStatus: """ 封装有关用户的各种状态的数据库操作 key format: STATUS:USER_STATUS:UID:xxx 存储的是一个值UserStatus(参考edu.py) """ __PRIMARY_KEY = 'UID' __TABLE_NAME = 'USER_STATUS' __PREFIX = REDIS_DB_NAME + ':' + __TABLE_NAME + ':' + __PRIMARY_KEY def __init__(self): self.__conn = Redis().conn def signUp(self, uid): """ 用户注册 :param uid: 用户唯一标识 :return: """ # format: STATUS:USER_STATUS:UID:xxx key = self.__PREFIX + ':' + str(uid) self.__conn.set(key, UserStatus.Free) def getUserStatus(self, uid): """ 获取当前课程状态 :param uid: 用户唯一标识 :return: """ # format: STATUS:USER_STATUS:UID:xxx key = self.__PREFIX + ':' + str(uid) if not self.__conn.exists(key): self.signUp(uid=uid) return int(self.__conn.get(key)) def free(self, uid): """ 空闲 :param uid: 用户唯一标识 :return: """ # format: STATUS:User_STATUS:UID:xxx key = self.__PREFIX + ':' + str(uid) self.__conn.set(key, UserStatus.Free) def inRoom(self, uid): """ 在房间中 :param uid: 用户唯一标识 :return: """ # format: STATUS:LESSON_STATUS:UID:xxx key = self.__PREFIX + ':' + str(uid) self.__conn.set(key, UserStatus.InRoom) def inClass(self, uid): """ 在课堂中 :param uid: 用户唯一标识 :return: """ # format: STATUS:LESSON_STATUS:UID:xxx key = self.__PREFIX + ':' + str(uid) self.__conn.set(key, UserStatus.InClass)