Problem: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。

Solution: Save Coupons to Redis, Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Date : 2015-03-06 14:53:23
# @Author : NSSimacer
# @Version : 1.0
import redis
import string
import random
try:
sr = redis.StrictRedis(
host='127.0.0.1',
port=6379,
db=N, # 使用的数据库编号(默认 0 - 15)
password='password', # 如果设置了密码,请填入密码
charset='utf-8')
except redis.exceptions.RedisError, re:
print 'Redis Error: %s!' % re
def save_coupon_to_redis(coupon_list):
'''
将激活码/优惠券保存到 Redis 非关系型数据库中
'''
sr.flushdb() # 清空数据库
print 'Database is clear!'
for index, coupon in enumerate(coupon_list):
sr.set(str(index + 1), str(coupon))
try:
sr.save() # 将数据写入磁盘
except redis.exceptions.RedisError, re:
print 'Redis Error: %s!' % re
print 'Finish!'
def load_coupon():
'''
从 Redis 数据库中载入激活码/优惠券
'''
keys = sr.keys(pattern='*')
if keys is not None:
for key in keys:
print sr.get(key)
print "There are %s rows." % sr.dbsize()
def generate_coupon(coupon_num, coupon_length):
'''
产生激活码/优惠券
'''
coupon_list = []
coupon_character_list = list(string.uppercase + string.digits)
for i in xrange(coupon_num):
coupon_str = ''
for j in xrange(coupon_length):
coupon_str += random.choice(coupon_character_list)
coupon_list.append(coupon_str)
return coupon_list
if __name__ == '__main__':
coupon_num = 200
coupon_length = 8
save_coupon_to_redis(generate_coupon(coupon_num, coupon_length))
load_coupon()

主要目的是学习 Python 对 Redis 键值存储数据库的基本操作 —— 连接数据库 redis.StrictRedis(self, args),设置键值对 sr.set(self, key, value),把数据保存到本地磁盘 sr.save(self)/bgsave(self),获取具有一定模式的 key 的集合 sr.keys(self, pattern='*'),通过 key 查找 value sr.get(self, key)

更多 API,请参考 Welcome to redis-py’s documentation.

题目来源:Python 练习册,每天一个小程序 THX!