Redis

../_images/redis.png

Redis is an in-memory data store with on-disk persistence. It offers a high-performace cache that scales exceptionally well, making it an ideal choice for larger applications.

Persistence

Redis operates on data in memory, and by default also persists data to snapshots on disk. This is optimized for performance, with a minor risk of data loss, and is usually the best configuration for a cache. If you need different behavior, the frequency and type of persistence can be customized or disabled entirely. See Redis Persistence for details.

Connection Options

The Redis backend accepts any keyword arguments for redis.Redis. These can be passed via CachedSession:

>>> session = CachedSession('http_cache', backend='redis', host='192.168.1.63', port=6379)

Or via RedisCache:

>>> backend = RedisCache(host='192.168.1.63', port=6379)
>>> session = CachedSession('http_cache', backend=backend)

API Reference

RedisCache

Redis cache backend

RedisDict

A dictionary-like interface for Redis operations.

RedisHashDict

A dictionary-like interface for operations on a single Redis hash

class requests_cache.backends.redis.RedisCache(namespace='http_cache', connection=None, **kwargs)[source]

Bases: requests_cache.backends.base.BaseCache

Redis cache backend

Parameters
  • namespace – Redis namespace

  • connection (Optional[Redis]) – Redis connection instance to use instead of creating a new one

  • kwargs – Additional keyword arguments for redis.Redis

bulk_delete(keys)

Remove multiple responses and their associated redirects from the cache

Parameters

keys (Iterable[str]) –

clear()

Delete all items from the cache

create_key(request=None, **kwargs)

Create a normalized cache key from a request object

Parameters

request (Union[Request, PreparedRequest, CachedRequest, None]) –

Return type

str

delete(key)

Delete a response or redirect from the cache, as well any associated redirect history

Parameters

key (str) –

delete_url(url, method='GET', **kwargs)

Delete a cached response for the specified request

Parameters
  • url (str) –

  • method (str) –

delete_urls(urls, method='GET', **kwargs)

Delete all cached responses for the specified requests

Parameters
get_response(key, default=None)

Retrieve a response from the cache, if it exists

Parameters
  • key (str) – Cache key for the response

  • default – Value to return if key is not in the cache

Return type

Optional[CachedResponse]

has_key(key)

Returns True if key is in the cache

Parameters

key (str) –

Return type

bool

has_url(url, method='GET', **kwargs)

Returns True if the specified request is cached

Parameters
  • url (str) –

  • method (str) –

Return type

bool

keys(check_expiry=False)

Get all cache keys for redirects and valid responses combined

Return type

Iterator[str]

remove_expired_responses(expire_after=None)

Remove expired and invalid responses from the cache, optionally with revalidation

Parameters

expire_after (Union[None, int, float, str, datetime, timedelta]) – A new expiration time used to revalidate the cache

response_count(check_expiry=False)

Get the number of responses in the cache, excluding invalid (unusable) responses. Can also optionally exclude expired responses.

Return type

int

save_response(response, cache_key=None, expires=None)

Save a response to the cache

Parameters
  • cache_key (Optional[str]) – Cache key for this response; will otherwise be generated based on request

  • response (Union[Response, CachedResponse]) – response to save

  • expire_after – Time in seconds until this cache item should expire

  • expires (Optional[datetime]) –

update(other)

Update this cache with the contents of another cache

Parameters

other (BaseCache) –

property urls

Get all URLs currently in the cache (excluding redirects)

Return type

Iterator[str]

values(check_expiry=False)

Get all valid response objects from the cache

Return type

Iterator[CachedResponse]

class requests_cache.backends.redis.RedisDict(namespace, collection_name=None, connection=None, **kwargs)[source]

Bases: requests_cache.backends.base.BaseStorage

A dictionary-like interface for Redis operations.

Notes:
  • All keys will be encoded as bytes, and all values will be serialized

  • Supports TTL

Parameters
bulk_delete(keys)[source]

Delete multiple keys from the cache, without raising errors for missing keys

Parameters

keys (Iterable[str]) –

clear() None.  Remove all items from D.[source]
get(k[, d]) D[k] if k in D, else d.  d defaults to None.
items() a set-like object providing a view on D's items[source]
keys() a set-like object providing a view on D's keys[source]
pop(k[, d]) v, remove specified key and return the corresponding value.

If key is not found, d is returned if given, otherwise KeyError is raised.

popitem() (k, v), remove and return some (key, value) pair

as a 2-tuple; but raise KeyError if D is empty.

property serializer
setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D
update([E, ]**F) None.  Update D from mapping/iterable E and F.

If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v

values() an object providing a view on D's values[source]
class requests_cache.backends.redis.RedisHashDict(namespace='http_cache', collection_name=None, connection=None, **kwargs)[source]

Bases: requests_cache.backends.base.BaseStorage

A dictionary-like interface for operations on a single Redis hash

Notes:
  • All keys will be encoded as bytes, and all values will be serialized

  • Items will be stored in a hash named namespace:collection_name

Parameters
bulk_delete(keys)[source]

Delete multiple keys from the cache, without raising errors for missing keys

Parameters

keys (Iterable[str]) –

clear() None.  Remove all items from D.[source]
get(k[, d]) D[k] if k in D, else d.  d defaults to None.
items()[source]

Get all (key, value) pairs in the hash

keys() a set-like object providing a view on D's keys[source]
pop(k[, d]) v, remove specified key and return the corresponding value.

If key is not found, d is returned if given, otherwise KeyError is raised.

popitem() (k, v), remove and return some (key, value) pair

as a 2-tuple; but raise KeyError if D is empty.

property serializer
setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D
update([E, ]**F) None.  Update D from mapping/iterable E and F.

If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v

values()[source]

Get all values in the hash