我有一个带redis的django应用程序,目前用作Celery的经纪人,除此之外什么都没有。
我想进一步利用它进行查找缓存。
假设我的数据库中有一个广泛使用的表,我一直在寻找查找。对于相同的示例,假设它是美国邮政编码到城市/州名称的映射,或者实际上可能随时间变化的任何查找对我的应用程序很重要。
我的问题是:
一旦服务器启动(在我的情况下,Gunicorn),我如何一次性将数据库表中的数据加载到Redis。我的意思是 - 在哪里以及如何进行这一次通话? django框架中是否存在这种“onload”调用的位置?或者我只是在从数据库提供的第一个请求中触发它是懒惰的,但是触发整个表的Redis加载?
更新怎么样?如果数据库表以某种方式更新(例如,行删除,行更新,添加行)我如何捕获它以更新它的Redis表示?
是否有最佳实践或图书馆已经准备好了?
答案 0 :(得分:1)
我如何一次性加载
对于一次性加载,您可以找到答案here(从这些答案中只有urls.py为我工作)。但我更喜欢另一种情况。我会创建manage command,我会将此脚本添加到您启动Gunicorn的命令中。例如,如果您使用的是systemd,则可以将其添加到服务服务配置中。您也可以将这些组合起来,例如添加命令并从urls.py
调用它更新怎么样
这实际上取决于您的数据库。例如,如果使用postgresql,则可以将update / insert / delete和external table的触发器创建为redis。 django也有signal机制,所以你也可以在django中实现它。您也可以编写自定义包装器。在这个包装器中,您可以实现操作+与redis同步。你会称之为包装而不是。但我更喜欢第一种情况。
是否已经准备好了最佳实践或图书馆 是什么?
抱歉,我无法帮你解决这个问题。