2017-10-18 307 views
0

我需要定期存储像python,redis:在redis上存储一个多维列表。最好的数据类型?

[ 
[1, ...], 
[2, ...], 
[3, ...], 
[4, ...] 
] 
  1. 我需要使它在几秒钟后到期,并添加新的Python列表(所以我想创建列表并填写一次使用我的Python列表)。
  2. 我需要检索的特定范围SUB_LIST例如:[[2, ...], [3, ...]]

使用this library我正在考虑使用lpush在一次创建和填写清单,expire设置过期时间,我创建并填充之后,lrange得到我的蟒蛇sub_list的具体范围

我是使用一个很好的解决方案,还是有东西,更适合我的需要?

+0

听起来像是你应该存储每个内部列表('[1,...]'等)的值(可能是编码为JSON或类似)。这些键应该是外部列表中的位置,也许前缀的是整个事物的名称。这种访问子列表很容易。 – Alfe

+0

@Alfe,所以我应该使用(zadd)[http://redis-py.readthedocs.io/en/latest/#redis.Redis.zadd]?因为我不认为使用redis列表是可能的 – 91DarioDev

+0

Redis也支持列表,但我仅将它用于字符串。对我的锤子,JSON解决方案看起来像一个钉子。但请随时在本地存储列表。你为什么认为这是不可能的? – Alfe

回答

1

Redis仅支持单层数据结构,但您可以使用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']] 

'''