Remplace memcached par Redis

This commit is contained in:
Emmanuel Viennet 2021-07-27 15:33:11 +03:00
parent da4cea0316
commit 3b5b449a8a
6 changed files with 27 additions and 14 deletions

View File

@ -150,11 +150,7 @@ de votre installation ScoDoc 7 pour passer à ScoDoc 8 (*ne pas utiliser en prod
En tant qu'utilisateur `scodoc` (pour avoir accès aux bases départements de ScoDoc7):
1. Lancer memcached:
memcached
2. Dans un autre terminal, lancer le serveur:
Dans un terminal, lancer le serveur:
export FLASK_APP=scodoc.py
export FLASK_ENV=development

View File

@ -33,7 +33,12 @@ mail = Mail()
bootstrap = Bootstrap()
moment = Moment()
cache = Cache(config={"CACHE_TYPE": "MemcachedCache"}) # XXX TODO: configuration file
cache = Cache( # XXX TODO: configuration file
config={
# "CACHE_TYPE": "MemcachedCache"
"CACHE_TYPE": "RedisCache"
}
)
def create_app(config_class=Config):

View File

@ -974,7 +974,7 @@ def MonthTableBody(
#
# Cache absences
#
# On cache (via memcached ou autre, voir sco_cache.py) les _nombres_ d'absences
# On cache (via REDIS ou autre, voir sco_cache.py) les _nombres_ d'absences
# (justifiées et non justifiées) de chaque etudiant dans un semestre donné.
# Le cache peut être invalidé soit par étudiant/semestre, soit pour tous
# les étudiant d'un semestre.

View File

@ -27,7 +27,7 @@
"""Gestion des caches
-écrite pour ScoDoc8, utilise flask_caching et memcached
-écrite pour ScoDoc8, utilise flask_caching et REDIS
ScoDoc est maintenant multiprocessus / mono-thread, avec un cache en mémoire partagé.
"""
@ -57,7 +57,6 @@
import time
import traceback
import pylibmc
from flask import g
from app.scodoc import notesdb as ndb
@ -84,8 +83,8 @@ class ScoDocCache:
"""Returns cached evaluation, or None"""
try:
return CACHE.get(cls._get_key(oid))
except pylibmc.Error:
log("Warning: memcached error in get")
except:
log("XXX CACHE Warning: error in get")
log(traceback.format_exc())
return None
@ -98,8 +97,8 @@ class ScoDocCache:
status = CACHE.set(key, value, timeout=cls.timeout)
if not status:
log("Error: cache set failed !")
except pylibmc.Error:
log("Warning: memcached error in set")
except:
log("XXX CACHE Warning: error in set !!!")
return status
@ -207,12 +206,21 @@ class NotesTableCache(ScoDocCache):
@classmethod
def get(cls, formsemestre_id, compute=True):
"""Returns NotesTable for this formsemestre
Search in local cache (g.nt_cache) or global app cache (eg REDIS)
If not in cache and compute is True, build it and cache it.
"""
# try local cache (same request)
if not hasattr(g, "nt_cache"):
g.nt_cache = {}
else:
if formsemestre_id in g.nt_cache:
return g.nt_cache[formsemestre_id]
# try REDIS
key = cls._get_key(formsemestre_id)
nt = CACHE.get(key)
if nt or not compute:
return nt
# Recompute asked table:
from app.scodoc import notes_table
t0 = time.time()
@ -220,6 +228,7 @@ class NotesTableCache(ScoDocCache):
dt = time.time() - t0
log("caching formsemestre_id=%s (%gs)" % (formsemestre_id, dt))
_ = cls.set(formsemestre_id, nt)
g.nt_cache[formsemestre_id] = nt
return nt

View File

@ -52,9 +52,12 @@ apt-get install -y python3-wheel
apt-get -y install libpq-dev
apt-get -y install libcrack2-dev
apt-get -y install postgresql
apt-get -y install redis
apt-get -y install curl
apt-get -y install graphviz
systemctl start redis
# ------------ CREATION DU VIRTUALENV
echo "Creating python3 virtualenv..."
python3 -m venv venv || die "can't create Python 3 virtualenv"

View File

@ -19,7 +19,7 @@
# 3- Fichiers de données et config locale:
# archives, photos: /opt/scodoc/var/ => /opt/scodoc-data
#
# 4- TODO migrer de Apache à nginx, installer memcached, scripts service systemd
# 4- TODO migrer de Apache à nginx, scripts service systemd
#
source config.sh