Django Models Redis Cache (DMoReCa), library that gives your specified Django models regular caching via Redis
Project description
django-models-redis-cache
Django Models Redis Cache (DMoReCa), library that gives your specified Django models regular caching via Redis
For one project, I needed to work with redis, but redis-py provides a minimum level of work with redis. I didn't find any Django-like ORM for redis, so I wrote library python-redis-orm (PyPI).
Also, if you are searching for just django-like redis ORM, please check django-redis-orm (PyPI).
And this library is port to Django that provides easy-to-use Django models caching via Redis.
Working with this library, you are expected:
- Fully works in 2021
- Easy adaptation to your needs
- Adequate informational messages and error messages
- Built-in RedisRoot class that stores specified models, with:
- redis_instance setting - your redis connection (from redis-py)
- prefix setting - prefix of this RedisRoot to be stored in redis
- ignore_deserialization_errors setting - do not raise errors, while deserealizing data
- save_consistency setting - show structure-first data
- economy setting - to not return full data and save some requests (usually, speeds up your app on 80%)
- CRUD (Create Read Update Delete), in our variation: save, get, filter, order, update, delete:
example_instance = ExampleModel(example_field='example_data').save()
- to create an instance and get its data dictfiltered_example_instances = redis_root.get(ExampleModel, example_field='example_data')
- to get all ExampleModel instances with example_field filter and get its data dictordered_instances = redis_root.order(filtered_example_instances, '-id')
- to get ordered filtered_example_instances by id ('-' for reverse)updated_example_instances = redis_root.update(ExampleModel, ordered_instances, example_field='another_example_data')
- to update all ordered_instances example_field with value 'another_example_data' and get its data dictredis_root.delete(ExampleModel, updated_example_instances)
- to delete updated_example_instances
Installation
pip install django-models-redis-cache
Add "django_models_redis_cache" to your INSTALLED_APPS setting like this::
INSTALLED_APPS = [
...
'django_models_redis_cache',
]
Usage
You can set this part in your project settings.py
from django_models_redis_cache.core import *
def get_connection_pool():
host = 'localhost'
port = 6379
db = 0
connection_pool = redis.ConnectionPool(
decode_responses=True,
host=host,
port=port,
db=db,
)
return connection_pool
REDIS_ROOTS = {
'test_caching_root': RedisRoot(
prefix='test_caching',
connection_pool=get_connection_pool(),
ignore_deserialization_errors=True,
economy=True
)
}
Run in the background
You can just copy it to:
app/management/commands/command_name.py
And just run with:
python manage.py command_name
Help:
Django custom management commands
How to import something from settings
if redis_roots:
if type(redis_roots) == dict:
some_caching_redis_root = redis_roots['test_caching_root']
some_caching_redis_root.register_django_models({
DjangoModelToCache1: {
'enabled': True,
'ttl': 60 * 5, # Cache every 5 mins
'prefix': f'test_caching_root-DjangoModelToCache1-cache', # please make it unique
},
# DjangoModelToCache2: {
# 'enabled': True,
# 'ttl': 60 * 10, # Cache every 10 mins
# 'prefix': f'test_caching_root-DjangoModelToCache2-cache', # please make it unique
# },
# ...
})
# another_caching_redis_root = redis_roots['another_test_caching_root']
# some_caching_redis_root.registered_django_models({...})
roots_to_cache = [
some_caching_redis_root,
# another_caching_redis_root
]
print('STARTING CACHING')
while True:
for redis_root in roots_to_cache:
redis_root.check_cache()
else:
raise Exception('redis_roots must be dict')
else:
raise Exception('No redis_roots')
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
Built Distribution
Hashes for django-models-redis-cache-0.6.8.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e9c5b410fd791b58c9aea8ae5023229af28fce0131d43b0f8ffa3459f9dae0e |
|
MD5 | a6f57aaa280ab7412dbe1ecfb2a48154 |
|
BLAKE2b-256 | ac20379e07bd651166c6105412dfa8dfd02cc85966aa6c2feb032dfa0e7a635e |
Hashes for django_models_redis_cache-0.6.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1c223ccfc45958b6567b20d44c1a2338f53f349ef0d9b31270cd73e21bde093 |
|
MD5 | e81c5aadf3821f3d3aba340c2e6a53fd |
|
BLAKE2b-256 | f068d353f7631ce70bd3eb25d67a04507367bd26fbd2a6875271472788157169 |