Add Redis cache backend
parent
62e04549ac
commit
7d86972e58
|
@ -60,8 +60,8 @@ Full installation (including optional dependencies)
|
|||
pip install git+https://git.pictuga.com/pictuga/morss.git#[full]
|
||||
```
|
||||
|
||||
The full install includes mysql (possible cache backend). Otherwise, only
|
||||
in-memory and sqlite3 caches are available.
|
||||
The full install includes mysql and redis (possible cache backends). Otherwise,
|
||||
only in-memory and sqlite3 caches are available.
|
||||
|
||||
The dependency `lxml` is fairly long to install (especially on Raspberry Pi, as
|
||||
C code needs to be compiled). If possible on your distribution, try installing
|
||||
|
@ -372,6 +372,8 @@ will be cleared every time the program is run). Path can be defined with
|
|||
`SQLITE_PATH`.
|
||||
- `CACHE=mysql`: MySQL cache. Connection can be defined with the following
|
||||
environment variables: `MYSQL_USER`, `MYSQL_PWD`, `MYSQL_DB`, `MYSQL_HOST`
|
||||
- `CACHE=redis`: Redis cache. Connection can be defined with the following
|
||||
environment variables: `REDIS_HOST`, `REDIS_PORT`, `REDIS_DB`, `REDIS_PWD`
|
||||
|
||||
To limit the size of the cache:
|
||||
|
||||
|
|
|
@ -141,6 +141,23 @@ class CappedDict(OrderedDict, BaseCache):
|
|||
OrderedDict.__setitem__(self, key, data)
|
||||
|
||||
|
||||
try:
|
||||
import redis # isort:skip
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
class RedisCacheHandler(BaseCache):
|
||||
def __init__(self, host='localhost', port=6379, db=0, password=None):
|
||||
self.r = redis.Redis(host=host, port=port, db=db, password=password)
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.r.get(key)
|
||||
|
||||
def __setitem__(self, key, data):
|
||||
self.r.set(key, data)
|
||||
|
||||
|
||||
if 'CACHE' in os.environ:
|
||||
if os.environ['CACHE'] == 'mysql':
|
||||
default_cache = MySQLCacheHandler(
|
||||
|
@ -159,5 +176,13 @@ if 'CACHE' in os.environ:
|
|||
|
||||
default_cache = SQLiteCache(path)
|
||||
|
||||
elif os.environ['CACHE'] == 'redis':
|
||||
default_cache = RedisCacheHandler(
|
||||
host = os.getenv('REDIS_HOST', 'localhost'),
|
||||
port = int(os.getenv('REDIS_PORT', 6379)),
|
||||
db = int(os.getenv('REDIS_DB', 0)),
|
||||
password = os.getenv('REDIS_PWD', None)
|
||||
)
|
||||
|
||||
else:
|
||||
default_cache = CappedDict()
|
||||
|
|
2
setup.py
2
setup.py
|
@ -14,7 +14,7 @@ setup(
|
|||
license = 'AGPL v3',
|
||||
packages = [package_name],
|
||||
install_requires = ['lxml', 'bs4', 'python-dateutil', 'chardet'],
|
||||
extras_require = {'full': ['pymysql']},
|
||||
extras_require = {'full': ['pymysql', 'redis']},
|
||||
package_data = {package_name: ['feedify.ini']},
|
||||
data_files = [
|
||||
('share/' + package_name, ['README.md', 'LICENSE']),
|
||||
|
|
Loading…
Reference in New Issue