python之Web服务开发——分布式缓存

上一篇博客写了flask模块实现web服务搭建的基本方法以及简单的缓存功能,但是这种缓存随着服务重启便会丢失,也无法满足多个服务共享缓存的需求,因此,我们通过redis来实现web服务的分布式缓存。

import redis

client = redis.StrictRedis(host="***",port="***")

cache = Cache(client)

以斐波那契数为例:[fn=f(n-1)+f(n-2)]

我们通过递归构造缓存方法如下:

def get_fib(self, n): 

        if n == 0:

            return 0, True

        if n == 1:

            return 1, True

        result = cache.get_fib(n)

        if result:

            return result, True

        result = self.get_fib(n-1)[0] + self.get_fib(n-2)[0]

        cache.set_fib(n, result)

        return result, False

即:如果服务器处理过n,则n以下的结果再以后的调用中皆可以直接返回缓存答案。

第二次求fib(200) chaend为true   服务器通过缓存直接获取答案

重启服务器进程或其他服务端口不影响缓存提取

API服务扩展

1.MethodView

把参数直接注入到MethodView的构造器中,不再使用request.args,而是将参数直接放进URL里面

第一次求fib(213)   cached为false 服务器首次计算

image.

2.flask-classy

flask默认的MethodView无法在一个类里提供多个不同URL名称的API服务。所以接下来我们引入flask的扩展flask-classy来解决这个问题。

pip install flask-classy


image.

025源码论坛声明 1、本网站中的绝大部分资源来源于网络, 本网站不保证所有资源的正确性和安全性,不为其合法性负责.
2、对于一切使用本网站资源而可能遭致的意外、疏忽、侵权及其造成的损失,本网站对其概不负责,亦不承担任何法律责任。
3、其他单位或个人使用、转载或引用本站原创文章时必须同时征得本025源码网的同意.
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时删除并致以最深的歉意。
5、如需要本站的游戏源码或搭建帮助,可以联系站长 15623571666(微信同号)或者扫描右侧二维码!

您可能还会对下面的文章感兴趣:

    cache
    Processed in 0.004460 Second.