python练习册第三题
题目
将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。
解题思路
难点是压根不知道redis怎么用。好在找到了一些文章快速学了些:
使用python操作redis
python: redis介绍及简单应用
python(十一)下:Redis安装配置及使用详解
安装redis
包,就可以开始用了。
解决代码
mport redis
import base64
import 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
清除缓存:`flushdb' or 'flushall'
别人的代码
PS: 大同小异,窃喜
import redis
import base64
import re
def make_connect():
r = redis.Redis(host='127.0.0.1', port=6379, db=1)
return r
def 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()