我正在实现一个非常轻量级的Web项目,该项目只有一个页面,在图表中显示数据。我使用Django作为Web服务器,并使用d3.js作为此图的绘图例程。你可以想象,只有一些简单的时间序列必须由Django服务器响应,所以我想知道我是否可以在ram中保存这个变量。我的第一次测试是积极的,我的views.py中有类似的东西:
X = np.array([123,23,1,32,123,1])
@csrf_exempt
def getGraph(request):
global X
return HttpResponse(json.dumps(X))
请注意,X
偶尔会被另一个函数更新,但所有用户访问权限都是只读的。我必须处理
我发现a thread讨论了Django中的全局变量,但在这种情况下,难点在于处理多个写访问。
回答关于为什么我不希望在数据库中存储数据的潜在问题:我在X
中获得的所有数据已经存储在一个巨大的远程数据库中,而这个Web应用只需要显示数据。
答案 0 :(得分:2)
将它存储在变量中确实会产生线程影响(以及可扩展性 - 如果你有两个运行相同应用程序的Django服务器会怎么样?)。 Django社区的建议是不!。
这听起来非常适合Django缓存系统。只需使用getGraph
缓存@cache_page
视图,即可完成工作。无需使用内存缓存,内置的内存内存缓存缓存后端 * 可以正常工作。将一个非常高的数字作为缓存的超时(年)。
这样您就可以存储HTTP响应(JSON)而不是X的值。但是从您的代码示例中,这不是问题。如果需要重新计算X,则需要重新计算JSON,如果需要重新计算JSON,则需要重新计算X.
https://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs/
1 或只是'内置内存后端',我无法抗拒