import redis from datetime import datetime class RedisDB(object): def __init__(self): self.host = '127.0.0.1' self.port = 6379 self.passwd = '' self.db = 5 def connect(self): conn_pool = redis.Redis(host=self.host, port=self.port, db=self.db) return conn_pool def write(self, table_name, jsondata, date=None): conn = self.connect() # date = datetime.today().date().strftime('%Y%m%d') if date is None: date = datetime.today().date() else: date = datetime.strptime(date, '%Y%m%d').date() # name = f'{date}:{table_name}' # print(name) conn.set(f'{date}:{table_name}', jsondata) conn.close() if __name__ == '__main__': rd = RedisDB() r = rd.connect() r.set("CC:20230601:11_websocket", "key:Hello World")
时间: 2024-04-27 09:25:38 浏览: 102
这段代码是一个 Python 的 Redis 数据库操作类 `RedisDB`,它使用 Redis 的 Python 库 `redis` 进行操作。在 `__init__` 函数中,指定了 Redis 数据库的连接参数:`host` 为 Redis 服务器的 IP 地址,`port` 为 Redis 服务器的端口号,`passwd` 为 Redis 服务器的密码,`db` 为 Redis 数据库的编号。
`connect` 函数用于连接 Redis 数据库,返回 `redis.Redis` 对象。`write` 函数用于向 Redis 数据库中写入数据,参数 `table_name` 为表名,`jsondata` 为要写入的 JSON 数据,`date` 为日期,如果没有指定日期,则使用当天日期。它使用 `conn.set` 函数将数据写入 Redis 数据库,并使用 `conn.close` 函数关闭数据库连接。
在 `main` 函数中,首先实例化 `RedisDB` 对象,然后通过 `connect` 函数连接 Redis 数据库,并使用 `set` 函数向 Redis 数据库中写入数据。该行代码的作用是将 "key:Hello World" 写入名为 "CC:20230601:11_websocket" 的表中。
相关问题
Django1.8中通过Redis如何实现接口访问频率限制,分别限制每分钟、每天
在Django1.8中通过Redis实现接口访问频率限制,可以使用django-redis库,并结合Django的中间件实现。
首先,安装django-redis库:
```
pip install django-redis
```
接着,在settings.py中添加Redis配置:
```python
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
```
然后,创建一个middleware,用于对访问频率进行限制:
```python
from django.core.cache import cache
from django.http import HttpResponseForbidden
class RateLimitMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# 获取IP地址
ip_address = request.META.get('REMOTE_ADDR')
# 每分钟最多请求次数
per_minute = 100
# 每天最多请求次数
per_day = 1000
# 获取当前时间
now = datetime.datetime.now()
# 生成每分钟和每天的缓存键值
minute_key = 'minute_%s_%s' % (ip_address, now.strftime('%Y%m%d%H%M'))
day_key = 'day_%s_%s' % (ip_address, now.strftime('%Y%m%d'))
# 获取每分钟和每天已经请求的次数
minute_count = cache.get(minute_key) or 0
day_count = cache.get(day_key) or 0
# 如果请求次数超过限制,返回403错误
if minute_count >= per_minute:
return HttpResponseForbidden('每分钟最多请求%d次' % per_minute)
if day_count >= per_day:
return HttpResponseForbidden('每天最多请求%d次' % per_day)
# 将每分钟和每天的请求次数加1,并设置缓存过期时间
cache.set(minute_key, minute_count + 1, 60)
cache.set(day_key, day_count + 1, 60 * 60 * 24)
return self.get_response(request)
```
最后,在settings.py中添加middleware:
```python
MIDDLEWARE = [
# ...
'path.to.RateLimitMiddleware',
]
```
这样,每个IP地址每分钟和每天的请求次数就会被限制在一定范围内了。
阅读全文