想着提升下网站性能,开始学习折腾 Redis 缓存,记录下。
1. 安装 Redis
apt update
# 安装
apt install redis-server
2. Redis 参考配置
# 绑定本机(禁止外部访问)
bind 127.0.0.1 ::1
# 数据库数量
databases 5
# 持久化
save 900 1
save 300 10
save 60 10000
# 密码
requirepass XXOO.OOXX
# 内存限制
maxmemory 256mb
# 内存满时策略:删除最少使用的缓存
maxmemory-policy allkeys-lru
# 客户端配置
timeout 300
tcp-keepalive 300
3. 配置 django
# settings.py
# 全站缓存,必须保持在最前和最后
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
# ... 其他中间件 ...
'django.middleware.cache.FetchFromCacheMiddleware',
]
# Redis配置
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'PASSWORD': 'XXOO.OOXX',
"SOCKET_CONNECT_TIMEOUT": 5,
"SOCKET_TIMEOUT": 5,
}
}
}
CACHE_MIDDLEWARE_SECONDS = 21600
CACHE_MIDDLEWARE_KEY_PREFIX = 'Codenotes:'
4. 更新清理缓存
# admin.py
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'publish_date', 'author', 'hits', 'status')
# 保存时清理
def save_model(self, request, obj, form, change):
obj.save()
cache.clear()
# 删除时清理
def delete_model(self, request, obj):
obj.delete()
cache.clear()
# 批量删除时清理
def delete_queryset(self, request, queryset):
queryset.delete()
cache.clear()