From e467790b457831138c0d9b3217145884c4b212cb Mon Sep 17 00:00:00 2001 From: Rainy21 Date: Sun, 15 Mar 2026 23:47:30 -0400 Subject: [PATCH] added redis --- cache/__init__.py | 0 cache/redis_client.py | 3 +++ main.py | 18 +++++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 cache/__init__.py create mode 100644 cache/redis_client.py diff --git a/cache/__init__.py b/cache/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cache/redis_client.py b/cache/redis_client.py new file mode 100644 index 0000000..b54de85 --- /dev/null +++ b/cache/redis_client.py @@ -0,0 +1,3 @@ +import redis + +redis_client = redis.Redis(host="localhost", port=6379, decode_responses=True) diff --git a/main.py b/main.py index cadc3fb..e4186f4 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,15 @@ from fastapi import FastAPI, HTTPException, Depends from fastapi.responses import RedirectResponse +# redis +from cache.redis_client import redis_client + # the sqlalchemy from sqlalchemy.orm import Session import string import random +# the database from db.database import SessionLocal, engine from db import models, crud, schemas @@ -33,13 +37,25 @@ def shorten_url(request: schemas.URLCreate, db: Session = Depends(get_db)): crud.create_url(db, short_code, request.long_url) + # set it in cache for a hour + redis_client.set(short_code, request.long_url, ex=3600) + return {"short_url": f"http://localhost:8000/{short_code}"} @app.get("/{short_code}") def redirect_url(short_code: str, db: Session = Depends(get_db)): - db_url = crud.get_url(db, short_code) + # check the redis + check_url = redis_client.get(short_code) + if check_url: + return RedirectResponse(url=check_url) + + # get url from the db + db_url = crud.get_url(db, short_code) + # throw a error if url not in db if not db_url: raise HTTPException(status_code=404, detail="URL not found") + + redis_client.set(short_code, db_url.long_url) return RedirectResponse(url=db_url.long_url)