복붙노트

[REDIS] 레디 스, 세션 만료 및 역방향 조회

REDIS

레디 스, 세션 만료 및 역방향 조회

저는 현재 웹 응용 프로그램을 빌딩하고있어 저장 세션 레디 스를 사용하고 싶습니다. 로그인시 세션 15 분에 대응하는 사용자 ID 및 유효 레디 스 세트에 삽입된다. 지금 같은 역 룩업 세션을 (특정 사용자 ID와 세션을 얻을)를 구현하는 것입니다. 나는 레디 스 이것을 구현하는 방법, 키 스페이스를 검색 할 수 없기 때문에 문제는 여기에있다. 한 가지 방법은 모든 세션 ID를 포함, 각 userId를위한 레디 스 세트를 가지고하는 것입니다. 레디 스는 집합에서 항목의 만료를 허용하지 않기 때문에 그러나 세션이 만료되도록 설정되어, 세트에 inexistent 세션 ID의 톤이있을 것입니다.

키 만료에 세트에서 ID를 제거하는 가장 좋은 방법이 있을까요? 또는, 내가 (역 룩업를) 원하는 것을 달성하는 더 나은 방법은 무엇입니까?

해결법

  1. ==============================

    1.항목이 만료 될 때 레디 스 (2.6)의 현재 릴리스 지점에, 당신은 알림을 가질 수 없습니다. 아마 다음 버전으로 변경됩니다.

    항목이 만료 될 때 레디 스 (2.6)의 현재 릴리스 지점에, 당신은 알림을 가질 수 없습니다. 아마 다음 버전으로 변경됩니다.

    한편, 귀하의 요구 사항을 지원하기 위해 수동 만료 알림 지원을 구현해야합니다. 당신이 그래서 있습니다 :

    session:<sessionid> -> a hash storing your session data - one of the field is <userid>
    user:<userid> -> a set of <sessionid>
    

    당신은 세션이 만료 될 때 사용자가 설정에서 세션 ID를 제거해야합니다. 그래서 당신은 누구의 점수 타임 스탬프 인 추가 소트 세트를 유지 관리 할 수 ​​있습니다.

    때 사용자 (100)에 대한 세션 (10)을 만듭니다

    MULTI
    HMSET session:10 userid:100 ... other session data ...
    SADD user:100 10
    ZADD to_be_expired <current timestamp + session timeout> 10
    EXEC
    

    그런 다음 만료 (ZRANGEBYSCORE를) 세션을 식별 할 수 ZSET를 폴링하는 데몬을 구축 할 필요가있다. 만료 된 각 세션의 경우, 데이터 구조를 유지해야한다 :

    주요 어려움은 더 경쟁 조건이 없는지 확인하는 것입니다 때 데몬 조사 및 프로세스 항목을. 이 구현 될 수있는 방법을 보려면이 질문에 대한 내 대답을 참조하십시오 :

    어떻게 핸들 세션 레디 스를 내놓고 만료?

  2. ==============================

    2.레디 스의 최신 버전 (2.8.0 이상)에서 만료 된 이벤트에 대한 KEYSPACE 알림이 지원됩니다. 즉 TTL 값을 가진 키가 만료 될 때이 이벤트가 트리거됩니다.

    레디 스의 최신 버전 (2.8.0 이상)에서 만료 된 이벤트에 대한 KEYSPACE 알림이 지원됩니다. 즉 TTL 값을 가진 키가 만료 될 때이 이벤트가 트리거됩니다.

    이에 가입하는 것입니다 :

    '__keyevent@0__:expired'
    

    이 이벤트에 가입하는 것은 허용 그래서 당신은 모든 세션에 대해 하나의 인덱스가하고 키가 만료 될 때 인덱스에서 키를 제거 할 수 있습니다.

    예:

    무게로 UID와 보조 인덱스로 소트 세트를 사용합니다 :

    ZADD "idx-session-uid" <uid> <sessionkey>
    

    와 특정 사용자에 대한 sessionkeys 검색 :

    ZRANGEBYSCORE "idx-session-uid" <uid> <uid>
    

    세션이 삭제되거나 만료 될 때 우리가 할 :

    ZREM "idx-session-uid" <sessionkey>
    
  3. from https://stackoverflow.com/questions/16741476/redis-session-expiration-and-reverse-lookup by cc-by-sa and MIT license