Python3通过Redis实现学生分数排行榜

Python操作Redis实现排行榜功能实例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time:2022/3/2 15:41
# @Software:PyCharm
__author__ = "JentZhang"
import redis
import random
import json

pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=15)

r = redis.Redis(connection_pool=pool)

TOP_KEY = "student_2021_final_score"


def init_score():
    """
    初始化学生分数(仅首次加载是运行)
    :return:
    """
    score_dict = {}
    for i in range(100):
        score_dict[f'student_{i + 1}'] = random.randint(0, 100)
    r.zadd(TOP_KEY, score_dict)


def get_top(n):
    """
    获取排行榜
    :param n:
    :return:
    """
    lst = list()

    tops = r.zrevrange(TOP_KEY, 0, n - 1, withscores=True)
    for i, t in enumerate(tops):
        lst.append({'row': i + 1, 'name': t[0].decode(), 'score': int(t[1])})

    return lst


if __name__ == "__main__":
    # init_score()
    top_lst = get_top(10)
    print(json.dumps(top_lst, indent=4))


程序运行结果(排名前十的学生)

[
    {
        "row": 1,
        "name": "student_90",
        "score": 100
    },
    {
        "row": 2,
        "name": "student_94",
        "score": 99
    },
    {
        "row": 3,
        "name": "student_86",
        "score": 99
    },
    {
        "row": 4,
        "name": "student_7",
        "score": 99
    },
    {
        "row": 5,
        "name": "student_96",
        "score": 97
    },
    {
        "row": 6,
        "name": "student_77",
        "score": 96
    },
    {
        "row": 7,
        "name": "student_39",
        "score": 96
    },
    {
        "row": 8,
        "name": "student_98",
        "score": 94
    },
    {
        "row": 9,
        "name": "student_67",
        "score": 94
    },
    {
        "row": 10,
        "name": "student_46",
        "score": 94
    }
]


posted on 2022-03-02 16:11  JentZhang  阅读(243)  评论(0)    收藏  举报