python—从django redis缓存中检索数据需要花费大量时间

z0qdvdin  于 2021-06-08  发布在  Redis
关注(0)|答案(0)|浏览(302)

我正在尝试使用redis缓存我的数据,以便减少db调用。但是,从缓存中检索所花费的时间要比在不缓存的情况下获取记录所花费的时间大得多。
我试图存储django queryset对象,它由大约28k+条记录组成,并且它只会随着数据库中数据的增加而增加。
我使用的是django-3.0 drf-3.10.3 django redis-4.12 redis-3.5.3
代码方面:
这是我的 settings.py 用于设置默认缓存

CACHES = {
'default': {
    'BACKEND': 'django_redis.cache.RedisCache',
    'LOCATION': [
        f'redis://{REDIS_HOST}:{REDIS_PORT}/1',
        f'redis://{REDIS_HOST}:{REDIS_PORT}/2'
    ],
    'OPTIONS': {
        'CLIENT_CLASS': 'django_redis.client.ShardClient',
        'CONNECTION_POOL_KWARGS': {
            'max_connections': 100,
            'retry_on_timeout': True
        },
        'PASSWORD': os.environ.get('REDIS_PASSWORD')
    }
}
``` `views.py` 从rest\u framework导入视图集从django.core.cache导入缓存从django.conf导入设置从django.core.cache.backends.base导入默认\u超时从rest\u framework.response导入响应缓存\u ttl=60*1

class RecordsList(viewsets.ModelViewSet):
__basic_fields = ('name', 'id')

queryset = Records.objects.all()

serializer_class = RecordsNewSerializer
http_method_names = ['get', 'post', 'put', 'delete']
filter_fields = __basic_fields
search_fields = __basic_fields

def get_queryset(self):
if 'records' in cache:
print('from cache')
queryset = cache.get('records')
else:
print("Saving to Cache")
queryset = Records.objects.all()
# queryset = queryset[1:5]
cache.set('records', queryset, timeout=CACHE_TTL)

 return queryset
如您所见,我正在将django queryset对象保存到缓存中,现在,当我将对象大小减小到仅100条记录时,获取这些记录所需的时间大约为 `400ms` 就整个数据而言 `3000ms+` . 它可以减少,如果我不添加缓存部分,我可以检索整个数据(28k+) `600ms` . 因此,当我添加缓存时,它会增加输出的时间。我实现缓存的方法是否错误??如果是这样的话,有人能帮我把事情做好吗?引导我走上正确的道路!!。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题