2017-10-18 46 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']] 

'''