Обычный django_redis генерирует этот вид сеансового ключа? - PullRequest
0 голосов
/ 03 октября 2019

Я новичок в django_redis lib. Я использую этот 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 db в redis-cli, ключ сеанса отличается. В версии 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]> 

Это нормально?

1 Ответ

1 голос
/ 04 октября 2019

Значение в таблице сеансов по определению является ключом сеанса, поэтому ему не нужно записывать дополнительную информацию.

Значение в кэше находится рядом со всеми другими значениями в кэше,не только другие ключи сеанса, поэтому он должен быть соответствующим образом расположен в пространстве имен. В этом случае он записывает:

  • Какой это сервер Django (KEY_PREFIX, который вы не используете)
  • Номер версии изэто кэшированное значение (1)
  • Модуль, который использует значение (django.contrib.sessions.cached_db)
  • Наконец, фактический ключ сеанса (skxn0oqp3goeipt6hnwvpeyp83hhoao0)

Последние два указаны самим бэкэндом сеанса. Этот ключ, версия и префикс объединяются в make_key(), который может быть переопределен серверной частью кэша.

Так что да, это нормально.

...