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
}
]
好记性不如烂笔头!