Welcome to Flask-CacheOBJ’s documentation!

Quick Start

Installation

Install the extension with one of the following commands:

$ easy_install Flask-CacheOBJ

or alternatively if you have pip installed:

$ pip install Flask-CacheOBJ

Initialize CacheOBJ

Cache is managed through a CacheOBJ instance:

from flask import Flask
from flask.ext.cacheobj import CacheOBJ

app = Flask(__name__)
cache = CacheOBJ(app)

You may also set up your CacheOBJ instance later at configuration time using init_app method:

cache = CacheOBJ()

app = Flask(__name__)
cache.init_app(app)

Configuration

The following configuration values exist for Flask-CacheOBJ:

CACHE_HOST A Redis server host.
CACHE_PORT A Redis server port. Default is 6379.
CACHE_DB A Redis db (zero-based number index). Default is 0.
CACHE_PREFIX Prefix attached before your key definition. Default is empty string.

Define Cache Strategy

Each strategy is a dict contains key, expire if possible:

ITEM = {
    'key': 'item:{item_id}',
    'expire': 86400
}
ITEM_STAT = {
    'key': 'item_stat:{item_id}',
    'expire': 86400
}
ITEM_LIST = {
    'key': 'item_list:{item_list_id}',
    'expire': 86400
}
ITEM_HASH = {
    'key': '{item_id}',
    'expire': 86400
}

Cache Object

To cache object you will use the cache.obj decorator:

@cache.obj(ITEM)
def get_item(item_id):
    return to_dict(Item.query.get(item_id))

Cache Counter

To cache counter you will use the cache.counter decorator:

@cache.counter(ITEM_STAT)
def get_item_stat(item_id):
    return to_dict(ItemStat.query.get(item_id))

Cache List

To cache list you will use the cache.list decorator:

@cache.counter(ITEM_LIST)
def get_item_list(item_list_id):
    return map(to_dict, ItemList.query.filter_by(item_list_id=item_list_id).all())

Cache Hash

To cache hash you will use the cache.hash decorator:

@cache.counter(ITEM_HASH)
def get_item(item_id):
    return to_dict(Item.query.get(item_id))

Flask-CacheOBJ APIs

This part of the documentation covers all interfaces of Flask-CacheOBJ.

class flask_cacheobj.CacheOBJ(app=None)

Use redis as cache layer for Flask applications.

Register it with:

app = Flask(__name__)
cache = FlaskCacheOBJ(app)

Or:

app = Flask(__name__)
cache = FlaskCacheOBJ()
cache.init_app(app)
counter

A decorator that can cache counter. Alias for flask_cacheobj.cache.cache_counter.

Define counter cache strategy and decorator your function:

STAT = {
    'key': 'item:stat:{item_id}',
    'expire': 60,
}

@cache.counter(STAT)
def get_item_stat(item_id):
    return to_dict(ItemStat.query.filter_by(item_id).first())
delete

A decorator that can delete object after function executed. Alias for flask_cacheobj.cache.delete_obj.

Define cache strategy and decorate your function:

ITEM = {
    'key': 'item:{item_id}',
    'expire': 86400,
}

@cache.delete(ITEM)
def update_item(item_id, attributes):
    return Item.query.get(item_id).update(**attributes)
hash

A decorator that can cache hash. Alias for flask_cacheobj.cache.cache_hash.

Define hash cache strategy and decorator your function:

ITEM_HASH = {
    'hash_key': 'item',
    'key': '{item_id}',
    'expire': 86400,
}

@cache.hash(ITEM)
def get_item(item_id):
    return to_dict(Item.query.get(item_id))
list

A decorator that can cache list. Alias for flask_cacheobj.cache.cache_list.

Define list cache strategy and decorator your function:

MEMBERS = {
    'key': 'item:members:{item_id}',
    'expire': 60,
}

@cache.list(STAT)
def get_item_members(item_id):
    members = ItemMember.query.filter_by(item_id).all()
    return [member.user_id for member in members]
mc

Redis instance used to cache value. Replace redis instance if you want.

Usage:

cache.mc = redis.StrictRedis()
obj

A decorator that can cache object. Alias for flask_cacheobj.cache.cache_obj.

Define cache strategy and decorate your function:

ITEM = {
    'key': 'item:{item_id}',
    'expire': 86400,
}

@cache.obj(ITEM)
def get_item(item_id):
    return to_dict(Item.query.get(item_id))
flask_cacheobj.cache.cache_obj(cache_key_reg, packer=<function encode>, unpacker=<function decode>)

A decorator that can cache function result.

Example:

@cache_obj({'key': 'item:{item_id}'})
def get_item(item_id):
    return Item.query.get(item_id)

@cache_obj({'key': 'item:{item_id}', 'expire': 60})
def get_item(item_id):
    return Item.query.get(item_id)

@cache_obj({'key': lambda filename: md5(filename).hexdigest()})
def get_file(filename):
    return remote.fetch_file_data(filename)
Parameters:
  • cache_key_reg – a dict-like object contains key and expire. cache_obj will inspect function arguments and format cache_key_reg[‘key’] if cache_key_reg[‘key’] is a string, or apply them to cache_key_reg[‘key’] if cache_key_reg[‘key’] is a callable object. expire is an integer. The unit is second.
  • packer – a method used to encode function result.
  • unpacker – a callable object used to decode msgpack data.
flask_cacheobj.cache.delete_cache(cache_key_reg, **kw)

Delete cache via cache key registry.

Example:

delete_cache({'key': 'item:{item_id}'}, item_id=1)
flask_cacheobj.cache.cache_hash(cache_key_reg, packer=<function encode>, unpacker=<function decode>)

A decorator that can cache function result into redis hash.

Example:

@cache_hash({'key': '{item_id}', 'hash_key': 'item'})
def get_item(item_id):
    return Item.query.get(item_id)
Parameters:cache_key_reg – a dict-like object contains hash_key, key. hash_key is a string as redis hash key. key is a template string or a callable object as hash field key.
flask_cacheobj.cache.hash_del(cache_key_reg, **kw)

Delete hash field.

Example:

hash_del({'key': '{item_id}', 'hash_key': 'item'}, item_id=1)
flask_cacheobj.cache.cache_list(cache_key_reg, packer=<type 'str'>, unpacker=<type 'int'>)
flask_cacheobj.cache.cache_counter(cache_key_reg, packer=<type 'str'>, unpacker=<type 'int'>)

A decorator that can cache counter function result.

Example:

@cache_counter({'key': 'group_members:{group_id}', 'expire': 60})
def get_group_members_count(group_id):
    return GroupMember.query.filter_by(group_id).count()
Parameters:cache_key_reg – a dict-like object contains key and expire.
flask_cacheobj.cache.inc_counter(cache_key_reg, delta=1, **kw)

Increase counter value.

Parameters:
  • cache_key_reg – a dict-like object contains key.
  • delta – increment delta. an integer. Default is 1.
  • kw – A dict of named parameters used to format cache_key_reg[‘key’].
flask_cacheobj.cache.dec_counter(cache_key_reg, delta=1, **kw)

Decrease counter value.

Parameters:
  • cache_key_reg – a dict-like object contains key.
  • delta – decrement delta. an integer. Default is 1.
  • kw – A dict of named parameters used to format cache_key_reg[‘key’].
flask_cacheobj.cache.get_counter(cache_key_reg, **kw)

Get counter value.

Parameters:
  • cache_key_reg – a dict-like object contains key.
  • kw – A dict of named parameters used to format cache_key_reg[‘key’].
flask_cacheobj.cache.set_counter(cache_key_reg, value=0, **kw)

Set counter value.

Parameters:
  • cache_key_reg – a dict-like object contains key.
  • value – reset counter value with given value.
  • kw – A dict of named parameters used to format cache_key_reg[‘key’].

Indices and tables