redis应用场景---缓存学生考试总成绩

1. 场景说明

stu_lst = [
    {'001': 588},
    {'002': 606},
    {'003': 620}
]

有一份学生考试成绩单,内容全校几千名学生的考试总成绩,要求你存入redis数据库,请选择合适的数据类型,你的程序支持根据学生的编码查询考试分数。

2. 思路分析

string 和 hash 都可以存储这些学生的考试成绩,如果用string, 那么需要设置3个key, 如果用hash, 只需要一个key

3. 参考代码

3.1 使用string

from redis.client import Redis

r = Redis(host='127.0.0.1', port=6379, db=0, password='密码')

stu_lst = [
    {'小明': 588},
    {'小刚': 606},
    {'小红': 620}
]

for stu in stu_lst:
    for name, score in stu.items():
        r.set(f"score::{name}", score)

score = r.get('score::小明')    # 获取小明的总成绩
score = int(score)
print(score)        # 588

# 批量获取学生考试分数
score_lst = r.mget(['score::小明', 'score::小红'])
print(score_lst)    # [b'588', b'620']

string 这种数据类型,支持批量操作,因此我一直很喜欢用它来存储数据,比如黑名单信息,当我想判断几十个电话号是否在黑名单中时,我可以使用mget方法,一次性传输数据获得结果。如果用集合,或者是hash,都不能让我一次性判断多个电话号是否在黑名单中。

3.2 使用hash

from redis.client import Redis

r = Redis(host='127.0.0.1', port=6379, db=0, password='密码')

stu_lst = [
    {'小明': 588},
    {'小刚': 606},
    {'小红': 620}
]

for stu in stu_lst:
    for name, score in stu.items():
        r.hset('stu_score', name, score)


score = r.hget('stu_score', '小刚')
print(int(score))       # 606

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案