FastAPI 使用Redis等缓存系统来存储IP地址的请求计数

18 min read

可以使用Python的Redis库来实现这一功能。在FastAPI中,需要在应用启动时,初始化一个Redis客户端。

import redis

redis_client = redis.Redis(host='localhost', port=6379, db=0)

然后,在需要统计请求计数的API路由中,可以使用以下代码:

from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI()

@app.get("/count-ip-address")
async def count_ip_address(ip_address: str):
    count = redis_client.get(ip_address)
    if count is None:
        count = 1
    else:
        count = int(count) + 1
    redis_client.set(ip_address, count)
    return PlainTextResponse(f"IP {ip_address} has been requested {count} times.")

在这段代码中,我们使用了Redis的get和set方法来获取和更新IP地址的请求计数。如果计数不存在,则默认为1;否则,将计数加1并设置回Redis。

需要注意的是,Redis的key应该使用具有唯一性的键值,例如IP地址等。此外,我们还可以设置key的过期时间,以便限制内存使用。可以使用Redis的EXPIRE或EXPIREAT命令来实现这一功能。

redis_client.expire(ip_address, 3600) # key过期时间为3600秒

在以上的代码中,key的过期时间设为1小时。这样,如果一个key在1小时内没有被访问,Redis会自动将其删除,从而释放内存。