标签:端口 hosted 模板 during date 实现 org 直接 call
作用:用于缓存
官网
https://pythonhosted.org/Flask-Cache/
安装
pip install Flask-Cache
或
pip install Flask-Caching
配置(三种方式)
第一种
from flask import Flask
from flask_caching import Cache
app = Flask(__name__)
# Check Configuring Flask-Caching section for more details
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
第二种
cache = Cache(config={'CACHE_TYPE': 'simple'})
app = Flask(__name__)
cache.init_app(app)
第三种
#: Method A: During instantiation of class
cache = Cache(config={'CACHE_TYPE': 'simple'})
#: Method B: During init_app call
cache.init_app(app, config={'CACHE_TYPE': 'simple'})
配置多个缓存实例
如果有多个缓存需要使用不同的缓存后端,则可以备用多个字典;
cache1 = Cache()
cache2 = Cache()
cache1.init_app(app, config={ 'CACHE_TYPE' : 'redis','CACHE_REDIS_HOST':'192.168.1.20',
'CACHE_REDIS_PORT':'6390'})
cache2.init_app(app, config={ 'CACHE_TYPE' : 'redis','CACHE_REDIS_HOST':'192.168.1.21',
'CACHE_REDIS_PORT':'6390'})
其他配置操作
CACHE_TPYE
null: 无缓存
simple: 本地Python字典存储
memcached: 使用MemcachedCache作为缓存
gaememcached: 使用GAEMemcachedCache作为缓存
redis: 使用RedisCache作为存储
filesystem: 使用FileSystemCache作为缓存
saslmemcached: 使用SASLMemcachedCache作为缓存
RedisCache – redis配置
CACHE_DEFAULT_TIMEOUT 超时时间
CACHE_KEY_PREFIX cache_key前缀(key-value)
CACHE_REDIS_HOST Redis服务器主机
CACHE_REDIS_PORT Redis服务器端口。默认值为6379
CACHE_REDIS_PASSWORD Redis服务器密码
CACHE_REDIS_DB Redis db(从零开始的数字索引)。默认值为0
CACHE_REDIS_URL 连接到Redis服务器的URL(redis://user:password@host:port/db)
CACHE_ARGS 缓存时传递的参数列表
CACHE_OPTIONS 选项(传递参数的作用)
视图中使用
# 缓存视图函数
@blue.route('/home/')
@cache.cached(timeout=30)
def home():
pass
cache.cached:装饰器,装饰无参数函数,使得该函数结果可以缓存
参数:
timeout:超时时间
key_prefix:设置该函数的标志
unless:设置是否启用缓存,如果为True,不启用缓存
forced_update:设置缓存是否实时更新,如果为True,无论是否过期都将更新缓存
query_string:为True时,缓存键是先将参数排序然后哈希的结果
cache.memoize:装饰器,装饰有参数函数,使得该函数结果可以缓存
make_name:设置函数的标志,如果没有就使用装饰的函数
# 其他参数同cached
cache.delete_memoized:删除缓存
参数:
fname:缓存函数的名字或引用
*args:函数参数
cache.clear() # 清除缓存所有的缓存,这个操作需要慎重
cache.cache # 获取缓存对象
模板中使用
上面介绍的缓存功能都是在应用代码中使用,其实在Jinja2模板中,我们还可以使用{% cache %}
语句来缓存模板代码块:
{% cache 50, 'temp' %}
<p>This is under cache</p>
{% endcache %}
这样{% cache %}
和{% endcache %}
语句中所包括的内容就会被缓存起来。{% cache %}
语句的第一个参数是timeout
过期时间,默认为永不过期;第二个参数指定了缓存项的键值,如果不设,键值就是模板文件路径"+"缓存块的第一行
。上例中,我们设了键值是temp
,然后在代码中,我们可以这样获取缓存项实际的键值:
from flask.ext.cache import make_template_fragment_key
key = make_template_fragment_key('temp') # 获取实际的键值
cache.delete(key) # 使用实际键值删除缓存
打印出来看看,你会发现实际的键值其实是_template_fragment_cache_temp
。如果你要删除该缓存项,记得要传入实际的键值,而不是模板上定义的temp
。
其他使用
cache.set('name', 'atom', timeout=60) # 设置缓存
name = cache.get('name') # 取值
cache.clear() # 清空缓存
cache.delete(‘index’) # 删除缓存
所有类型的缓存对象都继承自flask框架的BaseCache,它定义了一个使用缓存的标准接口,通过继承BaseCache实现这些接口就可以在flask中方便的集成各种缓存;而flask_caching插件为我们对redis、memcached等实现了接口,做好了适配工作,我们可以直接使用。
from werkzeug.contrib.cache import BaseCache
# 标准接口
clear():清除缓存
get(key):获取一个键的值,如果值是json格式会自动转化成字典
set(key,value,timeout):设置一个键值,value可以是字典,会自动转化json格式的字符串
set_many(key,value,timeout):设置多个键值对
add(key, value, timeout=None):设置一个键值,如果存在就pass,注意和set的区别
delete(key):删除键
delete_many(k1,k2...):删除多个键值
get_many(k1,k2...):获取多个键的值
get_dict(k1,k2...):获取多个键的值,返回一个字典
has(k):查询是否存在一个键
inc(self, key, delta=1):将键的值加一
dec(self, key, delta=1):将键的值减一
自定义缓存后端
#: the_app/custom.py
class RedisCache(BaseCache):
def __init__(self, servers, default_timeout=500):
pass
# 实现BaseCache的各个接口
def redis(app, config, args, kwargs):
args.append(app.config['REDIS_SERVERS'])
return RedisCache(*args, **kwargs)
# CACHE_TYPE 就是 the_app.custom.redis
from the_app.custom import redis
cache.init_app(app, config={ 'CACHE_TYPE' : 'redis',})
标签:端口 hosted 模板 during date 实现 org 直接 call
原文地址:https://www.cnblogs.com/liuweida/p/12298909.html