forked from rDrama/rDrama
redis cache frontpage
parent
cc5a8db4e7
commit
7493722457
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue