복붙노트

[REDIS] 레디 스 : 설정에서 키 값 쌍으로 설정 시간 제한

REDIS

레디 스 : 설정에서 키 값 쌍으로 설정 시간 제한

I 키 'A'및 값 '1', '2', '3'에 레디 스의 세트를 갖는다. 다른이 세트의 각 키 - 값 쌍 시간 만료 설정하는 방법이있다.

(예를 들어, 'A', '1')으로 ( 'A', '2', 120) 초 후에 만료되는 60 초 동안 만료한다.

해결법

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

    1.불행하게도. 이 기능은 과거에 여러 번 요청했지만 레디 스 ' "용기"(즉,리스트, 해시, 세트와 정렬 된 세트), 회원 당 만료를 지원하지 않습니다.

    불행하게도. 이 기능은 과거에 여러 번 요청했지만 레디 스 ' "용기"(즉,리스트, 해시, 세트와 정렬 된 세트), 회원 당 만료를 지원하지 않습니다.

    당신은, 그러나, 그 결과를 달성하기 위해 자신의 논리를 구현할 수 있습니다. 이 문제를 해결하기 위해 여러 가지 방법이 있습니다 - 여기에 하나의 예입니다. 대신 세트를 사용하는 정렬 된 세트 (ZSET)를 사용하고 획기적인 값을 사용하여 만료 시간에 각 멤버의 점수를 설정합니다. 워크 플로우의이 유형은 예를 들어, 루아 스크립트를 사용하여 구현 될 수있다. 회원은 같은 것을 사용 추가하려면 :

    redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])
    

    그리고 EVAL 그것은 '1 60 1'을 사용하여 '1 (120) 2'등의 인수, 귀하의 예를 당. 실제로 "만료"로 설정에서 항목, 당신은 시간이 경과되면 삭제해야합니다. 당신은 당신의 목록을 검색 정기 간행물 프로세스를 구현하거나 그 접근에 그 중 하나를 할 수 있습니다. 예를 들어, 다음 루아는 회원을 만료 할 수 있습니다 :

    redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())
    

    그리고 EVAL은 여러분의 예에 따라 인수로 '1'을 사용.

    편집 : 파이썬을 사용하여 위를 달성하기 위해

    import time
    import redis
    
    def add(r, key, ttl, member):
        r.zadd(key, member, int(time.time()+ttl))
    
    def expire(r, key):
        r.zremrangebyscore(key, '-inf', int(time.time()))
    
    ...
    
    r = redis.Redis()
    add(r, 'a', 1, 60)
    add(r, 'a', 2, 120)
    
    # periodically or before every operation do
    expire(r, 'a')
    
  2. from https://stackoverflow.com/questions/24105074/redis-to-set-timeout-for-a-key-value-pair-in-set by cc-by-sa and MIT license