2017-10-18 1 views
0

내가 정기적으로 나는 그것을 몇 초 후에 만료 새로운 하나를 추가 할 필요가python, redis : redis에 다차원 목록을 저장하십시오. 최상의 데이터 유형?

[ 
[1, ...], 
[2, ...], 
[3, ...], 
[4, ...] 
] 
  1. 같은 파이썬 목록을 저장할 필요 (그래서 나는 목록을 만들고 그것을 채우기 싶습니다 한 번에 내 파이썬을 사용하여 명부). 난 생성하고 채워진 후에 [[2, ...], [3, ...]]

가 만료 시간을 설정하는 동시에 expire을 목록을 만들고 채울 lpush을 사용하여 내가 고려하고 this library 사용 :

  • i는 예를 들어 특정 범위 sub_list를 검색해야 , lrange 내 파이썬 sub_list의 특정 범위를 얻으려면

    나는 좋은 해결책을 사용하고 있습니까? 아니면 내 요구에 더 잘 맞는 것이 있습니까?

  • +0

    는 값 (아마 JSON 또는 유사한로서 부호화)으로 ('[1, ...]'등)를 소리. 키는 바깥 쪽 목록의 위치 여야하며 모든 항목의 이름 앞에 접두사가 붙을 수 있습니다. 이렇게하면 하위 목록에 쉽게 액세스 할 수 있습니다. – Alfe

    +0

    @Alfe 그래서 (zadd) [http://redis-py.readthedocs.io/en/latest/#redis.Redis.zadd]를 사용해야합니까? 왜냐하면 내가 redis list를 사용할 수 있다고 생각하지 않기 때문이다. – 91DarioDev

    +0

    Redis는리스트도 지원하지만 나는 문자열만을 위해 그것을 사용했다. json-solution은 손톱처럼 보입니다. 그러나 기본적으로 목록을 자유롭게 저장할 수 있습니다. 왜 그것이 가능하지 않다고 생각하니? – Alfe

    답변

    1

    Redis는 1 레벨 데이터 구조 만 지원하지만 Json을 사용하여 규칙을 위반할 수 있습니다. 따라서 각 내부 목록을 json 문자열로 만들고 redis 목록을 사용하여이 목록을 저장할 수 있습니다.

    1

    다만 피클을 사용하여 각 이너 목록을 저장한다 같은

    # store_objects_in_redis.py 
    ''' 
    Pickle (dumps) & set to store 
    Get & and unpickle (loads) to retrieve 
    # 
    Courtesy: Armin Ronacher, http://flask.pocoo.org/snippets/73/ 
    ''' 
    
    import redis 
    from pickle import loads, dumps 
    
    # Create client with default connection 
    client = redis.client.StrictRedis() 
    # An example complex object 
    stored_object = [{1,2,3}, {'a':1,'b':2,'c':3}, ['foo', 'bar']] 
    
    # store 
    client.set('obj', dumps(stored_object)) 
    
    # retrieve 
    retrieved_object = loads(client.get('obj')) 
    
    # compare 
    print(stored_object==retrieved_object, '\n', stored_object, '\n', retrieved_object) 
    
    ''' 
    Prints (Running in windows7) 
    == RESTART: K:/.../REDIS/store_objects_in_redis.py == 
    True 
    [{1, 2, 3}, {'c': 3, 'b': 2, 'a': 1}, ['foo', 'bar']] 
    [{1, 2, 3}, {'c': 3, 'b': 2, 'a': 1}, ['foo', 'bar']] 
    
    '''