현재 ArangoDB (connect-arango) 용 세션 저장소를 개발 중입니다. 그것은 MongoDB 세션 저장소 (connect-mongo, 그러므로 'connect-arango')와 거의 동일하게 작동하지만, 문제는 ArangoDB에 엔트리를위한 TTL이 내장되어 있지 않다는 것입니다.NodeJS 사용자 정의 세션 저장소, 만료 된 세션 지우기
MongoDB에는이 문제가 없습니다. 하지만 ArangoDB에서는 세션 저장소에서이 작업을 수행해야합니다.
(getTimeout을 사용하여) 60 초마다 만료 된 세션을 검사하는 것으로 충분합니까, 아니면 "get"기능이 호출 될 때마다 확인하는 것과 같이 다른 것을 사용해야합니까?
내가 그들을 취소하는 AQL 쿼리를 사용하는 것과 유사한 :
는FOR s IN sessions
FILTER s.expires < DATE_NOW()
REMOVE s IN sessions
사용자가 자신의 쿠키를 삭제한다면, 세션의 "수"기능을 사용하여 액세스되지 않을 것이라고 나는 의미 거기에서 만료되었는지 확인할 수 없습니다.
그러나 내가 할 수있는 "get"함수를 호출 할 때마다 위의 쿼리를 실행할 수 있지만 꽤 불필요한 및 서버에 더 많은 부하를 넣을 것이라고 생각합니다.
편집 : 아무도 오해하지 않습니다. 만료 된 세션을 지우는 방법을 알고 있습니다. 분명히 (이 경우 AQL 쿼리입니다.) 명확한 기능을 실행하는 빈도를 모르겠습니다.
스킵 목록을 사용하는 방법은 어떻습니까? 그렇다면 누군가가 세션에 액세스 할 때마다 쿼리가 실행되지만 액세스간에 60 초 이상이 경과 한 경우에만 쿼리를 실행하십시오. 그렇게하면 한 시간 동안 아무도 사이트를 방문하지 않을 때마다 60 초마다 확인하지 못합니다. 어떤 시점에서 정리가 끝나면 콜렉션에서 만료 된 세션에 문제가 없습니다. – Metamist
이 접근법도 작동해야하지만 GC를 트리거하는 요청은 지연 될 수 있습니다. – fceller