https://github.com/codemation/easycaching
Shared, persistent, and smart caching
https://github.com/codemation/easycaching
Last synced: 2 months ago
JSON representation
Shared, persistent, and smart caching
- Host: GitHub
- URL: https://github.com/codemation/easycaching
- Owner: codemation
- License: mit
- Created: 2021-04-02T23:04:55.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-06-28T09:50:29.000Z (almost 5 years ago)
- Last Synced: 2025-09-27T20:14:09.814Z (6 months ago)
- Language: Python
- Size: 88.9 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

#
Shared, persistent, and smart caching
[](https://easycache.readthedocs.io/en/latest/?badge=latest)
[](https://badge.fury.io/py/easycaching)
[](https://github.com/codemation/easycaching/actions/workflows/main.yaml)
Documentation
[https://easycache.readthedocs.io/en/latest/](https://easycache.readthedocs.io/en/latest/)
## What is it?
easycaching provides a single shared interface for storing and retreiving data from memory among many processes(forks) of an application.
## Features
- fast and shared access to data
- persistent cache backed by a database
- auto-forking
- python syntax
## Get Started
```bash
pip install easycaching
```
## Cache Usage
```python
import asyncio
from easycaching import EasyCacheManager
async def main():
# create EasyCache instance
cache = await EasyCacheManager.create(
'test'
)
test = await cache.create_cache('test')
# set
await test.set('foo', 'bar')
# get
cached_value = await test.get('foo')
# boolean
exists = await test.contains('foo')
# iterate over cache items
async for cache_item in test:
print(cache_item)
# delete
await test.delete('foo')
# clear all cache
await test.clear()
# access via manager
await cache.cache['test'].set('first', 'worst')
await cache.cache['test'].set('second', 'best')
await cache.cache['test'].set('third', 'treasure chest')
# safely exit
await cache.close()
asyncio.run(main())
```
## Queue Usage
```python
import asyncio
from easycaching import EasyCacheManager
async def main():
# create EasyCache instance
cache = await EasyCacheManager.create(
'test'
)
test_queue = await cache.create_queue('test')
# add items to queue
await test_queue.put('first')
await test_queue.put('second')
await test_queue.put('third')
# grab items from queue
result = await test_queue.get()
await test_queue.get() # second
await test_queue.get() # third
result = await test_queue.get() # empty
{'warning': 'queue empty'}
# empty a queue
await test_queue.clear()
# accessing via manager
await cache.queues['test'].put('fourth')
await cache.queues['test'].put('fifth')
# safely exit
await cache.close()
```
## FastAPI Usage - Cache
```python
# basic.py
from fastapi import FastAPI
from easycaching import EasyCacheManager
app = FastAPI()
@app.on_event('startup')
async def start_cache():
app.cache = await EasyCacheManager.create(
'test'
)
# create cache instance
await app.cache.create_cache('test')
@app.get('/cache')
async def view_cache(key: str):
return {
key: await app.cache.cache['test'][key]
}
@app.post('/cache')
async def set_cache(key: str, value: str):
return await app.cache.cache['test'].set(
key,
{'json': value}
)
```
```bash
uvicorn --host 0.0.0.0 --port 8230 basic:app --workers=5
```
## FastAPI Usage - Queue
```python
#basic.py
from fastapi import FastAPI
from easycaching import EasyCache
app = FastAPI()
@app.on_event('startup')
async def start_cache():
app.cache = await EasyCacheManager.create(
'test'
)
await app.cache.create_queue('test')
@app.post('/queue')
async def create_queue(name: str):
queue = await app.cache.create_queue(name)
return f"queue {name} created"
@app.post('/queue/{queue}')
async def add_to_queue(queue: str, data: dict):
return await cache.queues[queue].put(data)
@app.get('/queue/{queue}')
async def pull_from_queue(queue: str):
return await cache.queues[queue].get()
```
```bash
uvicorn --host 0.0.0.0 --port 8220 --workers 5 basic:app
```
## Under the Hood
easycaching utilizes the smart caching of [aiopyql](https://github.com/codemation/aiopyql) to provide cache acesss, cache storage, and perhaps most importantly updates and invalidation.
Data access sharing is made possible via proxy methods using [easyrpc](https://github.com/codemation/easyrpc). A cache background task is created & managed by gunicorn which main application workers access via proxies.
