【问题标题】:Is normal django_redis generate this kind of session key?正常的 django_redis 会生成这种会话密钥吗?
【发布时间】:2019-10-03 04:53:47
【问题描述】:

我是 django_redis 库的新手。我正在将此 confs 用于带有 redis 的会话存储:

...
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
        "KEY_PREFIX": ""
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
SESSION_CACHE_ALIAS = "default"
...

似乎一切正常。但是,当我检查数据库上会话的密钥(默认 sqlite)然后将该密钥值与 redis-cli 中的 redis db 进行比较时,会话密钥是不同的。在 redis-cli 版本中,会话密钥有一个前缀,即使我没有设置前缀。

会话密钥的 DB (sqlite) 版本

skxn0oqp3goeipt6hnwvpeyp83hhoao0

redis-cli 版本的密钥

127.0.0.1:6379[1]> keys *
1) ":1:django.contrib.sessions.cached_dbskxn0oqp3goeipt6hnwvpeyp83hhoao0"
127.0.0.1:6379[1]> 

这正常吗?

【问题讨论】:

    标签: django redis django-redis


    【解决方案1】:

    根据定义,会话表中的值是会话密钥,因此不需要记录任何附加信息。

    缓存中的值与缓存中的所有其他值并列,而不仅仅是其他会话键,因此必须对其进行适当的命名空间。在这种情况下,它会记录:

    • 这是哪个 Django 服务器(KEY_PREFIX,你没有使用)
    • 这个缓存值的version number (1)
    • 使用值 (django.contrib.sessions.cached_db) 的模块
    • 最后是实际的会话密钥 (skxn0oqp3goeipt6hnwvpeyp83hhoao0)

    最后两个是会话后端本身的specified。该键、版本和前缀由make_key() 组合,可以被缓存后端覆盖。

    是的,这是正常的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多