Django将查找表移动到Redis

时间:2017-06-15 15:19:51

标签: django django-cache

我有一个带redis的django应用程序,目前用作Celery的经纪人,除此之外什么都没有。

我想进一步利用它进行查找缓存。

假设我的数据库中有一个广泛使用的表,我一直在寻找查找。对于相同的示例,假设它是美国邮政编码到城市/州名称的映射,或者实际上可能随时间变化的任何查找对我的应用程序很重要。

我的问题是:

  1. 一旦服务器启动(在我的情况下,Gunicorn),我如何一次性将数据库表中的数据加载到Redis。我的意思是 - 在哪里以及如何进行这一次通话? django框架中是否存在这种“onload”调用的位置?或者我只是在从数据库提供的第一个请求中触发它是懒惰的,但是触发整个表的Redis加载?

  2. 更新怎么样?如果数据库表以某种方式更新(例如,行删除,行更新,添加行)我如何捕获它以更新它的Redis表示?

  3. 是否有最佳实践或图书馆已经准备好了?

1 个答案:

答案 0 :(得分:1)

  

我如何一次性加载

对于一次性加载,您可以找到答案here(从这些答案中只有urls.py为我工作)。但我更喜欢另一种情况。我会创建manage command,我会将此脚本添加到您启动Gunicorn的命令中。例如,如果您使用的是systemd,则可以将其添加到服务服务配置中。您也可以将这些组合起来,例如添加命令并从urls.py

调用它
  

更新怎么样

这实际上取决于您的数据库。例如,如果使用postgresql,则可以将update / insert / delete和external table的触发器创建为redis。 django也有signal机制,所以你也可以在django中实现它。您也可以编写自定义包装器。在这个包装器中,您可以实现操作+与redis同步。你会称之为包装而不是。但我更喜欢第一种情况。

  

是否已经准备好了最佳实践或图书馆   是什么?

抱歉,我无法帮你解决这个问题。