В настоящее время я создаю хранилище сеансов для ArangoDB (connect-arango). Он работает почти идентично хранилищу сеансов MongoDB (connect-mongo, следовательно, «connect-arango»), но проблема в том, что ArangoDB не имеет встроенного TTL для своих записей.Пользовательский сеанс NodeJS Store, ясные истекшие сеансы
У MongoDB есть это, и это не проблема. Но в ArangoDB я должен сделать это в хранилище сеансов где-нибудь.
Будет ли проверка на истекшие сессии каждые 60 секунд (с использованием setTimeout) достаточной или следует использовать что-то еще, например, проверять каждый раз, когда вызывается функция «получить»?
Я хотел бы использовать запрос AQL, чтобы очистить их, подобно этому:
FOR s IN sessions
FILTER s.expires < DATE_NOW()
REMOVE s IN sessions
Если бы пользователь, чтобы очистить его куки, сессия никогда не будет обращаться с помощью функции «получить», что означает, что я не может проверить, истек ли он.
Однако я могу выполнять указанный выше запрос каждый раз, когда вызывается функция «получить», но я думаю, что это было бы совершенно необязательно и больше нагрузки на сервер.
Редактировать: Просто никто не понимает, я знаю, как очистить истекшие сеансы, я просто не знаю, как часто запускать ясную функцию (в данном случае это AQL-запрос выше).
Как насчет того, чтобы использовать скип-лист, а затем запускать ясный запрос каждый раз, когда кто-то обращается к сеансу, но только если между обращениями было более 60 секунд. Таким образом, он не будет очищаться каждые 60 секунд, когда никто не посещает сайт, скажем, час. У меня нет проблем с истечением сеансов в коллекции, пока они будут очищены в какой-то момент. – Metamist
Этот подход также должен работать, но может задержать запрос, инициирующий GC. – fceller