我想在我的简单 Django 项目中使用 Redis-Cache。我无法理解 Django 中的实现
I wanna use Redis-Cache in my simple Django project. I'm not able to understand the implementation in Django
下面是我的看法。现在到这里,我无法获得实现Redis缓存的方法。
从django.core.cache导入缓存
class 用户列表视图(APIView):
def get(self, request):
# userss = Cach.objects.values('cache_id', 'username', 'email')
data = Cach.objects.values('cache_id', 'username', 'email')
# cache.set('users',userss)
# data = cache.get('users')
return Response(data)
实现任何缓存的逻辑如下:
- 通过获取对象检查对象是否存在于缓存中。
- 如果不存在,则计算对象(或生成对象)并放入缓存。
- Return 对象。
Django 为缓存提供了一个简单的类似字典的 API。一旦你有了 correctly configured the cache,你就可以使用简单的缓存 api:
from django.core.cache import cache
def get(request):
value = cache.get('somekey')
if not value:
# The value in the cache for the key 'somekey' has expired
# or doesn't exist, so we generate the value
value = 42
cache.set('somekey', value)
django 中的缓存还有很多内容,请务必阅读 the documentation,其中介绍了如何在模板中使用缓存、如何缓存整个视图输出等等。
为了使用 Django Redis 缓存,您需要对 Django 及其 APIView 进行 Redis 和一些配置。
在Django项目中要放置如下配置settings.py
:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://redis:6379",
"TIMEOUT": 5 * 60,
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient"
},
"KEY_PREFIX": "example"
}
}
为了为所有站点视图设置缓存,应在 settings.py
中的 Django 中间件中使用以下更改:
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
根据 this doc 所有视图都可以缓存。
如果你想使用 cache per each view 你可以在 Django 中使用它的相关装饰器,如下所示:
from django.views.decorators.cache import cache_page
@cache_page(60 * 5)
def my_view(request):
...
此外,如果您使用的是REST-API,则必须使用以下装饰器来代替(@method_decorator(cache_page(60 * 5))
) doc .这是一个例子:
from django.utils.decorators import method_decorator
class PostView(APIView):
@method_decorator(cache_page(60 * 5))
def get(self, request, format=None):
content = {
'title': 'Post title',
'body': 'Post content'
}
return Response(content)
[注意]:
- 要求:
pip install django-redis
上面使用的Redis服务是docker化的容器,docker-compose.yml
部分如下:
redis:
restart: always
image: redis:latest
ports:
- "6379:6379"
因此,如果你想在本地使用 Redis,你必须将 "LOCATION": "redis://redis:6379",
替换为 "LOCATION": "redis://127.0.0.1:6379",
下面是我的看法。现在到这里,我无法获得实现Redis缓存的方法。
从django.core.cache导入缓存 class 用户列表视图(APIView):
def get(self, request):
# userss = Cach.objects.values('cache_id', 'username', 'email')
data = Cach.objects.values('cache_id', 'username', 'email')
# cache.set('users',userss)
# data = cache.get('users')
return Response(data)
实现任何缓存的逻辑如下:
- 通过获取对象检查对象是否存在于缓存中。
- 如果不存在,则计算对象(或生成对象)并放入缓存。
- Return 对象。
Django 为缓存提供了一个简单的类似字典的 API。一旦你有了 correctly configured the cache,你就可以使用简单的缓存 api:
from django.core.cache import cache
def get(request):
value = cache.get('somekey')
if not value:
# The value in the cache for the key 'somekey' has expired
# or doesn't exist, so we generate the value
value = 42
cache.set('somekey', value)
django 中的缓存还有很多内容,请务必阅读 the documentation,其中介绍了如何在模板中使用缓存、如何缓存整个视图输出等等。
为了使用 Django Redis 缓存,您需要对 Django 及其 APIView 进行 Redis 和一些配置。
在Django项目中要放置如下配置settings.py
:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://redis:6379",
"TIMEOUT": 5 * 60,
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient"
},
"KEY_PREFIX": "example"
}
}
为了为所有站点视图设置缓存,应在 settings.py
中的 Django 中间件中使用以下更改:
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
根据 this doc 所有视图都可以缓存。
如果你想使用 cache per each view 你可以在 Django 中使用它的相关装饰器,如下所示:
from django.views.decorators.cache import cache_page @cache_page(60 * 5) def my_view(request): ...
此外,如果您使用的是REST-API,则必须使用以下装饰器来代替(@method_decorator(cache_page(60 * 5))
) doc .这是一个例子:
from django.utils.decorators import method_decorator class PostView(APIView): @method_decorator(cache_page(60 * 5)) def get(self, request, format=None): content = { 'title': 'Post title', 'body': 'Post content' } return Response(content)
[注意]:
- 要求:
pip install django-redis
上面使用的Redis服务是docker化的容器,
docker-compose.yml
部分如下:redis: restart: always image: redis:latest ports: - "6379:6379"
因此,如果你想在本地使用 Redis,你必须将 "LOCATION": "redis://redis:6379",
替换为 "LOCATION": "redis://127.0.0.1:6379",