cement.ext.ext_redis

The Redis Extension provides application caching and key/value store support via Redis.

Requirements

  • redis (pip install redis)

Configuration

This extension honors the following config settings under a [cache.redis] section in any configuration file:

  • expire_time - The default time in second to expire items in the cache. Default: 0 (does not expire).
  • host - Redis server.
  • port - Redis port.
  • db - Redis database number.

Configurations can be passed as defaults to a CementApp:

from cement.core.foundation import CementApp
from cement.utils.misc import init_defaults

defaults = init_defaults('myapp', 'cache.redis')
defaults['cache.redis']['expire_time'] = 0
defaults['cache.redis']['host'] = '127.0.0.1'
defaults['cache.redis']['port'] = 6379
defaults['cache.redis']['db'] = 0

class MyApp(CementApp):
    class Meta:
        label = 'myapp'
        config_defaults = defaults
        extensions = ['redis']
        cache_handler = 'redis'

Additionally, an application configuration file might have a section like the following:

[myapp]

# set the cache handler to use
cache_handler = redis


[cache.redis]

# time in seconds that an item in the cache will expire
expire_time = 300

# Redis server
host = 127.0.0.1

# Redis port
port = 6379

# Redis database number
db = 0

Usage

from cement.core import foundation
from cement.utils.misc import init_defaults

defaults = init_defaults('myapp', 'redis')
defaults['cache.redis']['expire_time'] = 300 # seconds
defaults['cache.redis']['host'] = '127.0.0.1'
defaults['cache.redis']['port'] = 6379
defaults['cache.redis']['db'] = 0

class MyApp(foundation.CementApp):
    class Meta:
        label = 'myapp'
        config_defaults = defaults
        extensions = ['redis']
        cache_handler = 'redis'

with MyApp() as app:
    # Run the app
    app.run()

    # Set a cached value
    app.cache.set('my_key', 'my value')

    # Get a cached value
    app.cache.get('my_key')

    # Delete a cached value
    app.cache.delete('my_key')

    # Delete the entire cache
    app.cache.purge()
class cement.ext.ext_redis.RedisCacheHandler(*args, **kw)

Bases: cement.core.cache.CementCacheHandler

This class implements the ICache interface. It provides a caching interface using the redis library.

Note This extension has an external dependency on redis. You must include redis in your applications dependencies as Cement explicitly does not include external dependencies for optional extensions.

class Meta

Bases: object

Handler meta-data.

interface

alias of ICache

RedisCacheHandler._config(key, default=None)

This is a simple wrapper, and is equivalent to: self.app.config.get('cache.redis', <key>).

Parameters:key – The key to get a config value from the ‘cache.redis’ config section.
Returns:The value of the given key.
RedisCacheHandler.delete(key, **kw)

Delete an item from the cache for the given key. Additional keyword arguments are ignored.

Parameters:key – The key to delete from the cache.
Returns:None
RedisCacheHandler.get(key, fallback=None, **kw)

Get a value from the cache. Additional keyword arguments are ignored.

Parameters:
  • key – The key of the item in the cache to get.
  • fallback – The value to return if the item is not found in the cache.
Returns:

The value of the item in the cache, or the fallback value.

RedisCacheHandler.purge(**kw)

Purge the entire cache, all keys and values will be lost. Any additional keyword arguments will be passed directly to the redis flush_all() function.

Returns:None
RedisCacheHandler.set(key, value, time=None, **kw)

Set a value in the cache for the given key. Additional keyword arguments are ignored.

Parameters:
  • key – The key of the item in the cache to set.
  • value – The value of the item to set.
  • time – The expiration time (in seconds) to keep the item cached. Defaults to expire_time as defined in the applications configuration.
Returns:

None