我需要在一个使用Python 3的flask应用程序中保存一次并多次加载一些大数组。我最初用json库将这些数组存储在磁盘上。为了加快速度,我在同一台机器上使用Redis,通过将数组序列化为JSON字符串来存储数组。我想知道为什么我没有得到改善(实际上在我使用的服务器上需要更多的时间),而Redis将数据保存在RAM中。我想JSON序列化并没有得到优化,但我不知道如何才能加快这个速度。
import json
import redis
import os
import time
current_folder = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(current_folder, "my_file")
my_array = [1]*10000000
with open(file_path, 'w') as outfile:
json.dump(my_array, outfile)
start_time = time.time()
with open(file_path, 'r') as infile:
my_array = json.load(infile)
print("JSON from disk : ", time.time() - start_time)
r = redis.Redis()
my_array_as_string = json.dumps(my_array)
r.set("my_array_as_string", my_array_as_string)
start_time = time.time()
my_array_as_string = r.get("my_array_as_string")
print("Fetch from Redis:", time.time() - start_time)
start_time = time.time()
my_array = json.loads(my_array_as_string)
print("Parse JSON :", time.time() - start_time)
Result:
JSON from disk : 1.075700044631958
Fetch from Redis: 0.078125
Parse JSON : 1.0247752666473389
EDIT谈到这个问题,我想说的是,从Redis获取数据的速度其实很快,但JSON解析的速度却相当慢。有没有一种方法可以直接从Redis中获取一个数组,而不需要JSON序列化部分?这就是我们用pyMySQL做的,而且速度很快。