题目
将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。
解题思路
难点是压根不知道redis怎么用。好在找到了一些文章快速学了些:
安装redis
包,就可以开始用了。
解决代码
mport redisimport base64import re# 查询def query(r, name, key): return r.hget(name=name, key=key)if __name__ == '__main__': dict = {} r = redis.Redis(host='127.0.0.1', port=6379, db=0) with open('coupon.txt', 'r') as fp: for line in fp.readlines(): s = base64.urlsafe_b64decode(line.encode('utf-8')) id = re.findall(r'.*/.*:(.*)\'', str(s)) r.hset(name='coupon', key=line.strip(), value=id)
redis哈希储存可以用下表表示,这是从别人博客抄过来的:
name hash |````````````|n1 --------> | k1 --> v1 | | k2 --> v2 | |____________| |````````````|n2 --------> | k7 --> v7 | |____________|
这样子存储后在redis中只有一个key就是coupon
,相关的查询操作都是在这个key上。
redis相关操作记录
切换db:select+n
别人的代码
PS: 大同小异,窃喜
import redisimport base64import redef make_connect(): r = redis.Redis(host='127.0.0.1', port=6379, db=1) return rdef parse_coupon(c_code): return base64.urlsafe_b64decode(c_code.encode('utf-8'))def upload_to_database(): session = make_connect() with open('coupon.txt', 'r') as file: for line in file.readlines(): c_id = re.findall(r'.*/.*:(.*)\'', str(parse_coupon(line))) session.set(c_id.pop(), line.strip())if __name__ == '__main__': upload_to_database()