# Basic Redis Rate-limiting Demo Python (Django) Show how the redis works with Python (Django). ## Try it out

Deploy to Heorku

Deploy with Vercel

Run on Google Cloud

## How to run on Google Cloud ### 1. Click "Run on Google Cloud" Open up the link under "Manage this application at Cloud Console" ![](https://raw.githubusercontent.com/redis-developer/basic-rate-limiting-demo-python/master/image1.jpg?v=2&s=2) ### 2. Click “Edit and Deploy New Revision” ![](https://raw.githubusercontent.com/redis-developer/basic-rate-limiting-demo-python/master/image2.jpg?v=2&s=2) ### 3. Click “Variables and Secrets” Supply Redis Enterprise Cloud Endpoint URL ![](https://raw.githubusercontent.com/redis-developer/basic-rate-limiting-demo-python/master/image3.jpg?v=2&s=2) ### 4. Enable HTTP/2 Ensure that you have Redis Enterprise Cloud DB created under GCP. ![](https://raw.githubusercontent.com/redis-developer/basic-rate-limiting-demo-python/master/image_4.jpg?v=2&s=2) ### 5. Allow all the traffic ![](https://raw.githubusercontent.com/redis-developer/basic-rate-limiting-demo-python/master/image_5.jpg?v=2&s=2) Hence, you should be able to access Rate Limiting app ![](https://raw.githubusercontent.com/redis-developer/basic-rate-limiting-demo-python/master/image_6.pjpg?v=2&s=2) --- # How it works? ## 1. How the data is stored:
  1. New responses are added key-ip:
     SETNX your_ip:PING limit_amount
     Example: SETNX 127.0.0.1:PING 10 
    more information

  2. Set a timeout on key:
    EXPIRE your_ip:PING timeout
    Example: EXPIRE 127.0.0.1:PING 1000 
    more information

## 2. How the data is accessed:
  1. Next responses are get bucket:
    GET your_ip:PING
    Example: GET 127.0.0.1:PING   
    
    more information

  2. Next responses are changed bucket:
    DECRBY your_ip:PING amount
    Example: DECRBY 127.0.0.1:PING 1
    more information
--- ## How to run it locally? ``` git clone https://github.com/redis-developer/basic-rate-limiting-demo-python.git ``` ### Run docker compose or install redis manually Install docker (on mac: https://docs.docker.com/docker-for-mac/install/) ```sh docker network create global docker-compose up -d --build ``` #### Open directory server (cd server/configuration): copy .env.example to create .env (copy .env.example .env or cp .env.example .env). And provide the values for environment variables (if needed) - DJANGO_DEBUG: Django debug mode - ALLOWED_HOSTS: Allowed hosts - REDIS_URL: Redis server url - REDIS_HOST: Redis server host - REDIS_PORT: Redis server port - REDIS_DB: Redis server db index - REDIS_PASSWORD: Redis server password #### Run backend Install python, pip and venv (on mac: https://installpython3.com/mac/) Use python version: 3.8 ``` sh python3 -m venv venv source ./venv/bin/activate pip3 install -r requirements.txt python3 server/manage.py collectstatic python3 server/manage.py runserver ``` #### Run frontend Static сontent runs automatically with the backend part.