151 lines
4.5 KiB
Markdown
151 lines
4.5 KiB
Markdown
# 不使用Redis的配置说明
|
||
|
||
## 概述
|
||
|
||
本项目支持两种运行模式:
|
||
1. **使用Redis模式** - 生产环境推荐,提供分布式缓存和更好的性能
|
||
2. **不使用Redis模式** - 开发/测试环境推荐,使用本地内存缓存,无需安装Redis
|
||
|
||
## 配置方式
|
||
|
||
### 不使用Redis配置
|
||
|
||
在 `conf/env.py` 文件中,将 `USE_REDIS` 设置为 `False`:
|
||
|
||
```python
|
||
# ================================================= #
|
||
# ******** redis配置,无redis 可不进行配置 ******** #
|
||
# ================================================= #
|
||
# 是否使用Redis,设置为False则不使用Redis(使用本地内存缓存和数据库)
|
||
USE_REDIS = False # 设置为False
|
||
|
||
# 以下Redis配置仅在USE_REDIS=True时生效
|
||
REDIS_DB = 1
|
||
CELERY_BROKER_DB = 3
|
||
REDIS_PASSWORD = ''
|
||
REDIS_HOST = '127.0.0.1'
|
||
```
|
||
|
||
### 使用Redis配置
|
||
|
||
如果需要使用Redis,将 `USE_REDIS` 设置为 `True`:
|
||
|
||
```python
|
||
USE_REDIS = True # 设置为True
|
||
|
||
# 配置Redis连接信息
|
||
REDIS_DB = 1
|
||
CELERY_BROKER_DB = 3
|
||
REDIS_PASSWORD = 'your_password' # Redis密码,无密码则留空
|
||
REDIS_HOST = '127.0.0.1' # Redis服务器地址
|
||
```
|
||
|
||
## 不同配置下的行为
|
||
|
||
### 1. 缓存系统
|
||
|
||
| 配置 | 缓存后端 | 说明 |
|
||
|------|---------|------|
|
||
| `USE_REDIS = False` | `django.core.cache.backends.locmem.LocMemCache` | 本地内存缓存 |
|
||
| `USE_REDIS = True` | `django_redis.cache.RedisCache` | Redis分布式缓存 |
|
||
|
||
**注意**:本地内存缓存在多进程部署环境下不共享,重启后数据会丢失。
|
||
|
||
### 2. Channels(WebSocket/SSE)
|
||
|
||
| 配置 | Channel Layer | 说明 |
|
||
|------|--------------|------|
|
||
| `USE_REDIS = False` | `channels.layers.InMemoryChannelLayer` | 内存通道层 |
|
||
| `USE_REDIS = True` | `channels_redis.core.RedisChannelLayer` | Redis通道层 |
|
||
|
||
**注意**:内存通道层在多实例部署环境下不支持跨实例通信。
|
||
|
||
### 3. Celery异步任务
|
||
|
||
| 配置 | Broker | Result Backend | 说明 |
|
||
|------|--------|---------------|------|
|
||
| `USE_REDIS = False` | `amqp://guest@localhost//` | `cache+memory://` | 需要RabbitMQ |
|
||
| `USE_REDIS = True` | `redis://...` | `redis://...` | Redis作为broker和backend |
|
||
|
||
**注意**:
|
||
- 不使用Redis时,Celery需要RabbitMQ作为broker
|
||
- 如果项目不使用Celery异步任务,可以忽略此配置
|
||
- 可以使用数据库作为broker(需要额外配置)
|
||
|
||
### 4. 系统配置和字典缓存
|
||
|
||
| 配置 | 存储方式 | 说明 |
|
||
|------|---------|------|
|
||
| `USE_REDIS = False` | 从数据库读取 | 每次查询数据库 |
|
||
| `USE_REDIS = True` | Redis缓存 | 首次查询后缓存到Redis |
|
||
|
||
## 部署建议
|
||
|
||
### 开发/测试环境
|
||
```python
|
||
USE_REDIS = False # 推荐,简化环境配置
|
||
```
|
||
|
||
### 单机生产环境
|
||
```python
|
||
USE_REDIS = False # 可接受,但建议使用Redis以提高性能
|
||
```
|
||
|
||
### 多实例/分布式生产环境
|
||
```python
|
||
USE_REDIS = True # 必需,确保多实例间数据共享
|
||
```
|
||
|
||
## 性能对比
|
||
|
||
| 场景 | 不使用Redis | 使用Redis |
|
||
|------|-----------|----------|
|
||
| 缓存查询速度 | 快(内存) | 快(内存+网络) |
|
||
| 多实例数据共享 | ❌ 不支持 | ✅ 支持 |
|
||
| 缓存持久化 | ❌ 不支持 | ✅ 支持(可配置) |
|
||
| 部署复杂度 | ✅ 简单 | ⚠️ 需要部署Redis |
|
||
| 成本 | ✅ 免费 | ⚠️ 需要服务器资源 |
|
||
|
||
## 切换配置
|
||
|
||
1. 修改 `conf/env.py` 中的 `USE_REDIS` 配置
|
||
2. 重启Django服务
|
||
3. 如果从Redis切换到非Redis,建议清理之前的Redis缓存
|
||
|
||
## 故障排查
|
||
|
||
### 问题:项目启动报错,提示Redis连接失败
|
||
|
||
**解决方案**:
|
||
- 检查 `USE_REDIS` 是否正确设置为 `False`
|
||
- 确认 `conf/env.py` 文件已保存
|
||
|
||
### 问题:多用户环境下缓存不同步
|
||
|
||
**解决方案**:
|
||
- 如果在多实例部署环境,必须使用Redis
|
||
- 将 `USE_REDIS` 设置为 `True` 并配置Redis服务器
|
||
|
||
### 问题:Celery任务无法执行
|
||
|
||
**解决方案**:
|
||
- 检查是否安装了RabbitMQ或Redis
|
||
- 确认Celery worker是否正在运行
|
||
- 不使用异步任务时,可以忽略Celery相关配置
|
||
|
||
## 相关文件
|
||
|
||
- `conf/env.py` - 环境配置文件
|
||
- `conf/env.example.py` - 环境配置示例文件
|
||
- `application/settings.py` - Django主配置文件
|
||
- `application/dispatch.py` - 缓存相关工具函数
|
||
|
||
## 依赖说明
|
||
|
||
不使用Redis时,以下依赖仍然需要安装(用于其他功能):
|
||
- `django-redis==5.4.0` - Redis支持库(可选依赖)
|
||
- `channels-redis==4.2.0` - Channels Redis支持(可选依赖)
|
||
- `redis` - Redis客户端库(可选依赖)
|
||
|
||
这些依赖只在 `USE_REDIS = True` 时才会被使用。
|