forked from rDrama/rDrama
1
0
Fork 0

redis cache frontpage

master
Aevann 2023-06-27 23:03:14 +03:00
parent cc5a8db4e7
commit 7493722457
4 changed files with 24 additions and 8 deletions

View File

@ -6,6 +6,7 @@ import faulthandler
from os import environ
from sys import argv, stdout
import redis
import gevent
from flask import Flask
from flask_caching import Cache
@ -85,6 +86,8 @@ start_watching_settings()
cache = Cache(app)
Compress(app)
redis_instance = redis.Redis.from_url(app.config["CACHE_REDIS_URL"])
from files.routes.allroutes import *
if app.config['SERVICE'] == Service.RDRAMA:

View File

@ -5,7 +5,7 @@ from files.helpers.config.const import *
from files.helpers.settings import get_setting
from files.helpers.cloudflare import CLOUDFLARE_AVAILABLE
from files.routes.wrappers import *
from files.__main__ import app, limiter, get_CF
from files.__main__ import app, limiter, get_CF, redis_instance
@app.before_request
def before_request():
@ -51,8 +51,6 @@ def before_request():
g.nonce = secrets.token_urlsafe(31)
import redis
r = redis.Redis.from_url(app.config["CACHE_REDIS_URL"])
@app.after_request
def after_request(response:Response):
@ -64,9 +62,9 @@ def after_request(response:Response):
_commit_and_close_db()
if request.method == "POST" and not request.path.startswith('/casino/twentyone/'):
r.delete(f'LIMITER/{get_CF()}/{request.endpoint}:{request.path}/1/1/second')
redis_instance.delete(f'LIMITER/{get_CF()}/{request.endpoint}:{request.path}/1/1/second')
if user_id:
r.delete(f'LIMITER/{SITE}-{user_id}/{request.endpoint}:{request.path}/1/1/second')
redis_instance.delete(f'LIMITER/{SITE}-{user_id}/{request.endpoint}:{request.path}/1/1/second')
return response

View File

@ -9,7 +9,7 @@ from files.helpers.get import *
from files.helpers.sorting_and_time import *
from files.helpers.useractions import *
from files.routes.wrappers import *
from files.__main__ import app, cache, limiter
from files.__main__ import app, cache, limiter, redis_instance
@app.get("/")
@app.get("/h/<sub>")
@ -48,6 +48,10 @@ def front_all(v, sub=None, subdomain=None):
pins = session.get(sort, default)
if not v:
result = cache.get(f'frontpage_{sort}_{t}_{page}_{sub}_{pins}')
if result: return result
ids, total, size = frontlist(sort=sort,
page=page,
t=t,
@ -65,7 +69,13 @@ def front_all(v, sub=None, subdomain=None):
posts = [x for x in posts if not hasattr(x, 'voted') or not x.voted]
if v and v.client: return {"data": [x.json for x in posts], "total": total}
return render_template("home.html", v=v, listing=posts, total=total, sort=sort, t=t, page=page, sub=sub, home=True, pins=pins, size=size)
result = render_template("home.html", v=v, listing=posts, total=total, sort=sort, t=t, page=page, sub=sub, home=True, pins=pins, size=size)
if not v:
cache.set(f'frontpage_{sort}_{t}_{page}_{sub}_{pins}', result)
return result
LIMITED_WPD_HOLES = ('fights', 'gore', 'aftermath', 'selfharm', 'request', 'meta', 'discussion', 'social', 'music')

View File

@ -28,7 +28,7 @@ from files.routes.wrappers import *
from .front import frontlist
from .users import userpagelisting
from files.__main__ import app, limiter
from files.__main__ import app, limiter, redis_instance
@app.post("/publish/<int:pid>")
@limiter.limit('1/second', scope=rpath)
@ -733,6 +733,11 @@ def submit_post(v:User, sub=None):
cache.delete_memoized(userpagelisting)
g.db.flush()
key_pattern = app.config["CACHE_KEY_PREFIX"] + 'frontpage_*'
for key in redis_instance.scan_iter(key_pattern):
redis_instance.delete(key)
if v.client: return p.json
else:
p.voted = 1