Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

Sorry, you do not have permission to ask a question, You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please type your username.

Please type your E-Mail.

Please choose an appropriate title for the post.

Please choose the appropriate section so your post can be easily searched.

Please choose suitable Keywords Ex: post, video.

Browse

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 4941

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Latest Questions

Author
  • 61k
Author
Asked: November 27, 20242024-11-27T04:39:06+00:00 2024-11-27T04:39:06+00:00

Caching in FastAPI: Unlocking High-Performance Development:

  • 61k

In today’s digital world, every action—whether it’s swiping on a dating app or completing a purchase—relies on APIs working efficiently behind the scenes. As back-end developers, we know that every millisecond counts. But how can we make APIs respond faster? The answer lies in caching.

Caching is a technique that stores frequently accessed data in memory, allowing APIs to respond instantly instead of querying a slower database every time. Think of it like keeping key ingredients (salt, pepper, oil) on your kitchen countertop instead of fetching them from the pantry each time you cook—this saves time and makes the process more efficient. Similarly, caching reduces API response times by storing commonly requested data in a fast, accessible spot, like Redis.

Required Libraries to be installed

To connect with Redis Cache with FastAPI, we require the following libraries to be pre-installed.

pip install fastapi uvicorn aiocache pydantic 
Enter fullscreen mode Exit fullscreen mode

Pydantic is for creating database tables and structures. aiocache will perform asynchronous operations on Cache. uvicorn is responsible for the server running.

Redis Setup and Verification:

Setting up Redis directly in a Windows system is not possible at this juncture. Therefore, it has to be setup and run in Windows Subsystem for Linux. Instructions for installing WSL is given below

Install WSL | Microsoft Learn

Install Windows Subsystem for Linux with the command, wsl –install. Use a Bash terminal on your Windows machine run by your preferred Linux distribution – Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine, and more are available.

learn.microsoft.com

Post installing WSL, the following commands are required to install Redis

sudo apt update sudo apt install redis-server sudo systemctl start redis 
Enter fullscreen mode Exit fullscreen mode

To test Redis server connectivity, the following command is used

redis-cli 
Enter fullscreen mode Exit fullscreen mode

After this command, it will enter into a virtual terminal of port 6379. In that terminal, the redis commands can be typed and tested.

Setting Up the FastAPI Application

Let’s create a simple FastAPI app that retrieves user information and caches it for future requests. We will use Redis for storing cached responses.

Step 1: Define the Pydantic Model for User Data

We’ll use Pydantic to define our User model, which represents the structure of the API response.

from pydantic import BaseModel  class User(BaseModel):     id: int     name: str     email: str     age: int 
Enter fullscreen mode Exit fullscreen mode

Step 2: Create a Caching Decorator

To avoid repeating the caching logic for each endpoint, we’ll create a reusable caching decorator using the aiocache library. This decorator will attempt to retrieve the response from Redis before calling the actual function.

import json from functools import wraps from aiocache import Cache from fastapi import HTTPException  def cache_response(ttl: int = 60, namespace: str = "main"):     """     Caching decorator for FastAPI endpoints.      ttl: Time to live for the cache in seconds.     namespace: Namespace for cache keys in Redis.     """     def decorator(func):         @wraps(func)         async def wrapper(*args, **kwargs):             user_id = kwargs.get('user_id') or args[0]  # Assuming the user ID is the first argument             cache_key = f"{namespace}:user:{user_id}"              cache = Cache.REDIS(endpoint="localhost", port=6379, namespace=namespace)              # Try to retrieve data from cache             cached_value = await cache.get(cache_key)             if cached_value:                 return json.loads(cached_value)  # Return cached data              # Call the actual function if cache is not hit             response = await func(*args, **kwargs)              try:                 # Store the response in Redis with a TTL                 await cache.set(cache_key, json.dumps(response), ttl=ttl)             except Exception as e:                 raise HTTPException(status_code=500, detail=f"Error caching data: {e}")              return response         return wrapper     return decorator 
Enter fullscreen mode Exit fullscreen mode

Step 3: Implement a FastAPI Route for User Details

We’ll now implement a FastAPI route that retrieves user information based on a user ID. The response will be cached using Redis for faster access in subsequent requests.

from fastapi import FastAPI  app = FastAPI()  # Sample data representing users in a database users_db = {     1: {"id": 1, "name": "Alice", "email": "alice@example.com", "age": 25},     2: {"id": 2, "name": "Bob", "email": "bob@example.com", "age": 30},     3: {"id": 3, "name": "Charlie", "email": "charlie@example.com", "age": 22}, }  @app.get("/users/{user_id}") @cache_response(ttl=120, namespace="users") async def get_user_details(user_id: int):     # Simulate a database call by retrieving data from users_db     user = users_db.get(user_id)     if not user:         raise HTTPException(status_code=404, detail="User not found")      return user  
Enter fullscreen mode Exit fullscreen mode

Step 4: Run the Application

Start your FastAPI application by running:

uvicorn main:app --reload 
Enter fullscreen mode Exit fullscreen mode

Now, you can test the API by fetching user details via:

http://127.0.0.1:8000/users/1 
Enter fullscreen mode Exit fullscreen mode

The first request will fetch the data from the users_db, but subsequent requests will retrieve the data from Redis.

Testing the Cache

You can verify the cache by inspecting the keys stored in Redis. Open the Redis CLI:

redis-cli KEYS * 
Enter fullscreen mode Exit fullscreen mode

You will get all keys that have been stored in the Redis till TTL.

How Caching Works in This Example

First Request

: When the user data is requested for the first time, the API fetches it from the database (users_db) and stores the result in Redis with a time-to-live (TTL) of 120 seconds.

Subsequent Requests:

Any subsequent requests for the same user within the TTL period are served directly from Redis, making the response faster and reducing the load on the database.

TTL (Time to Live):

After 120 seconds, the cache entry expires, and the data is fetched from the database again on the next request, refreshing the cache.

Conclusion

In this tutorial, we’ve demonstrated how to implement Redis caching in a FastAPI application using a simple user details example. By caching API responses, you can significantly improve the performance of your application, particularly for data that doesn't change frequently.

Please do upvote and share if you find this article useful.

fastapipythonrediswebdev
  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 4k
  • Answers 0
  • Best Answers 0
  • Users 2k
  • Popular
  • Answers
  • Author

    How to ensure that all the routes on my Symfony ...

    • 0 Answers
  • Author

    Insights into Forms in Flask

    • 0 Answers
  • Author

    Kick Start Your Next Project With Holo Theme

    • 0 Answers

Top Members

Samantha Carter

Samantha Carter

  • 0 Questions
  • 20 Points
Begginer
Ella Lewis

Ella Lewis

  • 0 Questions
  • 20 Points
Begginer
Isaac Anderson

Isaac Anderson

  • 0 Questions
  • 20 Points
Begginer

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore, ask, and connect. Join our vibrant Q&A community today!

About Us

  • About Us
  • Contact Us
  • All Users

Legal Stuff

  • Terms of Use
  • Privacy Policy
  • Cookie Policy

Help

  • Knowledge Base
  • Support

Follow

© 2022 Querify Question. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.