2017-06-15 111 views
0

我有一个使用redis的django应用程序,它目前用作Celery的代理程序,除此之外没有任何其他信息。Django将查询表移动到Redis

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

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

我的问题是:

  1. 一旦服务器启动(在我的情况,Gunicorn),我该如何一次性从数据库表中的数据加载到Redis的。我的意思是 - 我在哪里以及如何让这一次打电话? django框架中是否有这样的“onload”调用?还是仅仅根据数据库提供的第一个请求触发它,但触发整个表的Redis加载?

  2. 更新是怎么回事?如果数据库表以某种方式更新(例如删除了行,更新了行,添加了行),那么为了更新它的Redis表示形式,我该如何捕获它?

  3. 有没有一个最佳实践或图书馆已经适应了这一切?

回答

1

我怎么一次性加载

对于一次负荷,你可以找到答案here(从这些答案只有urls.py工作对我来说)。但我更喜欢另一种场景。我会创建manage command,我会将此脚本添加到您启动Gunicorn的命令中。例如,如果您使用的是systemd,则可以将其添加到service service config。您也可以将那些像add命令和urls.py

叫它什么更新

这真的取决于你的数据库。例如,如果您使用postgresql,则可以创建更新/插入/删除和外部表的触发器作为redis。另外django有signal机制,所以你也可以在django中实现它。您也可以编写自定义包装器。在这个包装中,你实现了操作+与redis同步。你会调用包装而不是。但我更喜欢第一种情况。

有没有一个最佳实践或图书馆已准备好正确 ?

对不起,我不能帮你这个。