增加一个圆周率计算的服务,同样已计算过的结果需要存储,同样用redis处理缓存,应该怎么做?
定义一个pi服务,除了计算部分几乎没改动
class piserver():
def __init__(self):
self.catch = redis.StrictRedis('localhost', 6379) # 用redis缓存
self.key = 'piresult'
def catc(self,n):
if self.catch.hexists(self.key, str(n)): # 查看n在字段是否已存在
return str(self.catch.hget(self.key, str(n))), True
s = 0.0
for i in range(n):
s+=1.0/(2*i+1)/(2*i+1)
s=math.sqrt(s*8)
self.catch.hset(self.key, str(n), str(s)) # 记录计算结果
return str(s), False
定义hander:
class pihander(tornado.web.RequestHandler):
pi = piserver() # 实例化一个服务对象
def get(self):
n = int(self.get_argument('n')) # 获取url中的参数n
result,catch=self.pi.catc(n)
ppp={
'n':n,
'result':result,
'catch':catch
}
self.set_header('Content_Type','application/json;charset=utf-8')
self.write(json.dumps(ppp))
注册路由:
def make_app():
return tornado.web.Application([(r'/fact',facthander),(r'/pi',pihander)])
redis部分重复,那么单独将配置写出来:
def make_app():
catch = redis.StrictRedis('localhost', 6379) #配置redis存储缓冲
fact=factserver(catch) #实例化对象,传递参数
pi=piserver(catch)
return tornado.web.Application([(r'/fact',facthander,{'fact':fact}),(r'/pi',pihander,{'pi',pi})])
#传递带catch的对象
修改piserver初始化函数:
def __init__(self,catch):
# self.catch = redis.StrictRedis('localhost', 6379) # 用redis缓存
self.catch = catch # 用redis缓存
self.key = 'piresult'
修改pihander实例化部分:
def isinstance(self,pi):
self.pi=pi
# pi = piserver() # 实例化一个服务对象