Python:Flask Cache一段时间

时间:2018-03-11 13:40:14

标签: python caching flask

我的Flask应用程序将仅在特定时间从网址获取数据。如果超出时间范围,它将使用保存在缓存中的URL中的最后一个查询数据。在时间范围之外,url将不返回任何数据。因此,我想重用缓存中的最后一个数据

App\Model\Entity\Course Object
(
    [id] => 7
    [language_id] => 2
    [course_title] => test
    [course_desc] => 
    [audio_path] => 
    [img_path] => 
    [inappiosid] => 
    [inappandroidid] => 
    [sOrder] => 1
    [lessons] => Array
        (
            [0] => App\Model\Entity\Lesson Object
                (
                    [id] => 4
                    [course_id] => 7
                    [lesson_title] => test
                    [lesson_description] => test
                    [file_path] => test
                    [sOrder] => 1
                    [[new]] => 
                    [[accessible]] => Array
                        (
                            [course_id] => 1
                            [lesson_title] => 1
                            [lesson_description] => 1
                            [file_path] => 1
                            [sOrder] => 1
                            [course] => 1
                        )
                )
        )
    [[new]] => 
    [[accessible]] => Array
        (
            [language_id] => 1
            [course_title] => 1
            [course_desc] => 1
            [audio_path] => 1
            [img_path] => 1
            [inappiosid] => 1
            [inappandroidid] => 1
            [sOrder] => 1
            [language] => 1
            [customer_orders] => 1
            [lessons] => 1
        )
)

问题是我无法获取最后的缓存数据。如果在过去60秒内无法访问api / top,则不会有数据。

  1. 在网址返回之前一分钟缓存数据16.30

  2. 用户可以在时间范围之外使用缓存数据

  3. 我不熟悉缓存,所以我目前的想法可能不是最好的方法。

2 个答案:

答案 0 :(得分:1)

我不是烧瓶用户,但也许这是你想要的装饰者

<FlatList
   data={cards}
   ref={(ref) => { this._flatList = ref; }}
   horizontal
   pagingEnabled
   contentContainerStyle={{ paddingLeft: itemHorizontalMargin }}
   renderItem={(data) => this._renderItem(data)}
   showsHorizontalScrollIndicator={false}
   snapToInterval={itemWidth}
   keyExtractor = {item => item.name}
/>

答案 1 :(得分:1)

假设您只希望缓存在10:30h和16:30h之间工作,我会改变您使用缓存的方法。

我在当前实现中看到的问题是,除了在关键时间范围内不合需要的缓存过期外,您还需要在想要实际返回更新响应的时刻禁用它。

也就是说,我将使用不同的策略:每次计算更新的响应时保存到缓存,并在关键时间段从缓存中检索响应。

关于Flask-Cache documentation以及此tutorial中的信息,我将修改您的代码,如下所示:

from flask_app import app
from flask import jsonify,abort,make_response,request
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.cache import Cache
from datetime import datetime, time

app.config['CACHE_TYPE'] = 'simple'
app.cache = Cache(app)


@app.route('/top', methods=['GET'])
def top():
    now = datetime.now()
    now_time = now.time()

    if now_time >= time(10,30) and now_time <= time(16,30):
        print "within time, use data save in cache"
        return app.cache.get('last_top_response')

    page = requests.get('http://www.abvfc.com')
    data = re.findall(r'items:(.*)',page.content)
    response = jsonify(data)
    app.cache.set('last_top_response', response)
    return response

我希望这能满足您的需求