Skip to main content

Ring

Join the chat at https://gitter.im/ring-cache/community https://github.com/youknowone/ring/actions/workflows/python-package.yml/badge.svg https://codecov.io/gh/youknowone/ring/graph/badge.svg

Let’s concentrate on code, not on storages.

Ring shows a way to control cache in point of view of code - not about storages. Ring’s decorator is convenient but also keeps fluency for general scenarios.

asyncio support for Python3.5+!

Take advantage of perfectly explicit and fully automated cache interface. Ring decorators convert your functions to cached version of them, with extra control methods.

Documentation

Full documentation with examples and references: http://ring-cache.readthedocs.io/

  • Function/method support.

  • asyncio support.

  • Django support.

  • Bulk access support.

Function cache

import ring
import memcache
import requests

mc = memcache.Client(['127.0.0.1:11211'])

# working for mc, expire in 60sec
@ring.memcache(mc, time=60)
def get_url(url):
    return requests.get(url).content

# normal way - it is cached
data = get_url('http://example.com')

It is a normal smart cache flow.

But ring is different when you want to explicitly control it.

# delete the cache
get_url.delete('http://example.com')
# get cached data or None
data_or_none = get_url.get('http://example.com')

# get internal cache key
key = get_url.key('http://example.com')
# and access directly to the backend
direct_data = mc.get(key)

Method cache

import ring
import redis

rc = redis.StrictRedis()

class User(dict):
    def __ring_key__(self):
        return self['id']

    # working for rc, no expiration
    # using json coder for non-bytes cache data
    @ring.redis(rc, coder='json')
    def data(self):
        return self.copy()

    # parameters are also ok!
    @ring.redis(rc, coder='json')
    def child(self, child_id):
        return {'user_id': self['id'], 'child_id': child_id}

user = User(id=42, name='Ring')

# create and get cache
user_data = user.data()  # cached
user['name'] = 'Ding'
# still cached
cached_data = user.data()
assert user_data == cached_data
# refresh
updated_data = user.data.update()
assert user_data != updated_data

# id is the cache key so...
user2 = User(id=42)
# still hitting the same cache
assert updated_data == user2.data()

Installation

PyPI is the recommended way.

$ pip install ring
To browse versions and tarballs, visit:

https://pypi.python.org/pypi/ring/

To use memcached or redis, don’t forget to install related libraries. For example: python-memcached, python3-memcached, pylibmc, redis-py, Django etc

It may require to install and run related services on your system too. Look for memcached and redis for your system.

Contributors

See contributors list on:

https://github.com/youknowone/ring/graphs/contributors

Metadata

Release files for ring 0.10.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ring 0.10.1
File Size Uploaded
ring-0.10.1.tar.gz 33.8 kB Details

Release files / ring-0.10.1.tar.gz

Download URL ring-0.10.1.tar.gz
Size 33.8 kB
Tags Source
SHA-256 checksum
How to use checksums
5959e867978f29ad3399b011e7c7b5116fdf60fad9e63881df66e890cdbe329c
BLAKE2b-256 checksum
How to use checksums
5077863775e66d19f32f0264cd4e806c6247c9907d544ccca350b8b0e18ed412
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.1

Release history Release notifications | RSS feed

This release

0.10.1 This release

1 release file

0.10.0

1 release file

0.9.1

1 release file

0.9.0

1 release file

0.8.4

1 release file

0.8.3

1 release file

0.8.1

1 release file

0.8.0

1 release file

0.7.3

1 release file

0.7.2

1 release file

0.7.1

1 release file

0.7.0

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

4 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page