A cache interface with python object-property interface.
Project description
Cache object
~~~~~~~~~~~~
Cache object is general purpose object-property interface.
Example
-------
There is some pre-defined common types.
in-memory, memcache and redis backends are included. And its common general interfaces too.
>>> from cacheobj.redis import LocalRedisObject
>>> class UserCache(LocalRedisObject):
... _properties = ['username', 'name']
...
>>> user = UserCache(id=10)
>>> print user.username
None
>>> user.username = 'username'
>>> user.name = 'Real Name'
>>> print user.username
username
>>> user10 = UserCache(id=10)
>>> print user10.username
username
Cache is stored with class name and given id.
>>> print user.get('username', use_cache=True)
username
If you don't want to hit backend again, there is use_cache option for local memory cache.
For non-local cache backend, try a easy generator.
>>> from cacheobj.redis import get_redis_object
>>> import redis
>>> MyRedisObject = get_redis_object(redis.ConnectionPool()) # any connection pool
>>> class MyUserCache(MyRedisObject):
... pass
...
Custom Backend
--------------
Upper examples are shortcut for basic configuration.
>>> from cacheobj import SimpleCacheObject
>>> from cacheobj.backends.memcache import MemcacheBackend
>>> def get_backend():
... return MemcacheBackend(['127.0.0.1:11211'])
...
>>> class UserCache(SimpleCacheObject):
... _backend_generator = staticmethod(get_backend)
... _properties = ['username', 'name']
...
This object works as upper UserCache object.
You can put custom backend with this.
See source code to write a backend. It is just a few lines.
Composite Example
-----------------
You can composite multiple backends for an object.
>>> from cacheobj import CacheObject
>>> from cacheobj.backends.inmemory import InMemoryBackend
>>> from cacheobj.backends.memcache import MemcacheBackend
>>> from cacheobj.backends.redis import RedisBackend
>>>
>>> memory = InMemoryBackend()
>>> memcache = MemcacheBackend()
>>> redis = RedisBackend()
>>>
>>> class CompositeCache(CacheObject):
... _backends = {
... memory: ['mem1', 'mem2'],
... memcache: ['mc1', 'mc2'],
... redis: ['redis1', 'redis2'],
... }
...
>>> c = CompositeCache()
>>> c.mem1 # with backend memory
>>> c.mc1 # with backend memcache
>>> c.redis1 # with backend redis
~~~~~~~~~~~~
Cache object is general purpose object-property interface.
Example
-------
There is some pre-defined common types.
in-memory, memcache and redis backends are included. And its common general interfaces too.
>>> from cacheobj.redis import LocalRedisObject
>>> class UserCache(LocalRedisObject):
... _properties = ['username', 'name']
...
>>> user = UserCache(id=10)
>>> print user.username
None
>>> user.username = 'username'
>>> user.name = 'Real Name'
>>> print user.username
username
>>> user10 = UserCache(id=10)
>>> print user10.username
username
Cache is stored with class name and given id.
>>> print user.get('username', use_cache=True)
username
If you don't want to hit backend again, there is use_cache option for local memory cache.
For non-local cache backend, try a easy generator.
>>> from cacheobj.redis import get_redis_object
>>> import redis
>>> MyRedisObject = get_redis_object(redis.ConnectionPool()) # any connection pool
>>> class MyUserCache(MyRedisObject):
... pass
...
Custom Backend
--------------
Upper examples are shortcut for basic configuration.
>>> from cacheobj import SimpleCacheObject
>>> from cacheobj.backends.memcache import MemcacheBackend
>>> def get_backend():
... return MemcacheBackend(['127.0.0.1:11211'])
...
>>> class UserCache(SimpleCacheObject):
... _backend_generator = staticmethod(get_backend)
... _properties = ['username', 'name']
...
This object works as upper UserCache object.
You can put custom backend with this.
See source code to write a backend. It is just a few lines.
Composite Example
-----------------
You can composite multiple backends for an object.
>>> from cacheobj import CacheObject
>>> from cacheobj.backends.inmemory import InMemoryBackend
>>> from cacheobj.backends.memcache import MemcacheBackend
>>> from cacheobj.backends.redis import RedisBackend
>>>
>>> memory = InMemoryBackend()
>>> memcache = MemcacheBackend()
>>> redis = RedisBackend()
>>>
>>> class CompositeCache(CacheObject):
... _backends = {
... memory: ['mem1', 'mem2'],
... memcache: ['mc1', 'mc2'],
... redis: ['redis1', 'redis2'],
... }
...
>>> c = CompositeCache()
>>> c.mem1 # with backend memory
>>> c.mc1 # with backend memcache
>>> c.redis1 # with backend redis
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cacheobj-0.5.tar.gz
(4.2 kB
view details)
File details
Details for the file cacheobj-0.5.tar.gz
.
File metadata
- Download URL: cacheobj-0.5.tar.gz
- Upload date:
- Size: 4.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
6a8cef91833bdf7d9594c27a215634a2fae827b2efc6d6cc1dd320a8f3a481b1
|
|
MD5 |
2c820fd6ca34d6fccdba19a8bdc8dcce
|
|
BLAKE2b-256 |
3ac67394d74482a13c9855c4d4ef4854588b63c5f3e15d24faa07746341041b9
|