我的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,则不会有数据。
在网址返回之前一分钟缓存数据16.30
用户可以在时间范围之外使用缓存数据
我不熟悉缓存,所以我目前的想法可能不是最好的方法。
答案 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
我希望这能满足您的需求