django自带的cache无法多进程共享

  • 问题:

    from django.core.cache import cache
    在登录接口中我使用 django 自带的cache 来进行缓存token,
    同时使用 uwsgi 来部署django项目,配置了 4 个 worker 来接收用户请求,
    当用户请求带着token到达时,用户携带的token需要和内存中的token进行比较
    请问此时 4 个worker 是共享内存中的token吗?如果不是,有什么解决方案吗

  • 答案:

    在使用 uWSGI 部署 Django 项目时,配置了多个 worker 的情况下,每个 worker 实际上是运行在自己的进程中。因此,这些 worker 进程不会共享内存。这意味着,如果您在一个 worker 进程中使用 Django 的内建缓存系统(默认使用本地内存缓存)来存储 token,这个缓存不会被其他 worker 进程所共享。

    这种情况下,如果一个用户的请求被一个 worker 处理并在那个 worker 的内存中缓存了 token,另一个请求即使带着相同的 token 到达不同的 worker,也无法访问第一个 worker 的内存中的 token。这就会导致一致性问题。

    解决方案:
    为了解决这个问题,您需要使用一个共享的、中央化的缓存系统,这样所有的 worker 都可以访问同一个缓存数据。常见的解决方案包括:
    Redis:

    1. Redis 是一个非常流行的内存中数据结构存储系统,通常用作数据库、缓存和消息代理。它支持多种类型的数据结构,如字符串、散列、列表、集合、有序集合等。
      使用 Redis 作为 Django 的缓存后端可以确保所有 worker 都能访问和修改同一个 token 缓存。
      Memcached:

    2. Memcached 是另一个广泛使用的高性能分布式内存对象缓存系统,适合用于加速动态 Web 应用程序,通过减轻数据库负载。
      它也可以作为 Django 缓存后端,提供给多个 worker 共享的缓存。

    实施步骤:
    1.安装 Redis 或 Memcached:

    根据您选择的解决方案,安装 Redis 或 Memcached。如果是 Redis,可以使用 pip install redis 安装 Redis Python 客户端。
    2. 配置 Django:

    在 Django 的 settings.py 中配置缓存后端。例如,如果使用 Redis,配置可能如下所示:

    CACHES = {
    'default': {
    'BACKEND': 'django_redis.cache.RedisCache',
    'LOCATION': 'redis://127.0.0.1:6379/1',
    'OPTIONS': {
    'CLIENT_CLASS': 'django_redis.client.DefaultClient',
    }
    }
    }
    3. 使用缓存:

    在代码中,您可以像之前一样使用 cache 来存储和获取 token。现在,由于缓存是中央化的,无论哪个 worker 来处理请求,都能够访问到相同的 token 数据。
    通过这种方式,您可以确保所有 uWSGI worker 都能够访问和验证相同的 token,从而解决多进程环境下的数据共享问题。

相关推荐
怪兽源码4 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
追风少年ii4 小时前
多组学扩展---分子对接pyrosetta
python·数据分析·空间·单细胞
2301_821369614 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
m0_561359674 小时前
使用Kivy开发跨平台的移动应用
jvm·数据库·python
csdn_aspnet4 小时前
ASP.NET Core 中的依赖注入
后端·asp.net·di·.net core
编程火箭车4 小时前
04.第一个 Python 程序:Hello World 从编写到运行全解析
python·python第一个程序·python入门报错解决·python新手教程·hello world 程序·python终端运行·pycharm运行代码
qq_423233905 小时前
如何用FastAPI构建高性能的现代API
jvm·数据库·python
昊坤说不出的梦5 小时前
【实战】监控上下文切换及其优化方案
java·后端
疯狂踩坑人5 小时前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain
HDO清风5 小时前
CASIA-HWDB2.x 数据集DGRL文件解析(python)
开发语言·人工智能·pytorch·python·目标检测·计算机视觉·restful