Django 将查找 table 移动到 Redis
Django Moving lookup table to Redis
我有一个带有 Redis 的 Django 应用程序,目前用作 Celery 的代理,仅此而已。
我想进一步利用它进行查找缓存。
假设我的数据库中有一个广泛使用的 table,我一直在查找它。对于相同的示例,假设它是 U.S 的映射。 city/state 名称的邮政编码,或任何可能随时间变化的查询,这对我的应用程序很重要。
我的问题是:
服务器启动后(在我的例子中是 Gunicorn),我如何一次性将数据从数据库 table 加载到 Redis。我的意思是 - 我在哪里以及如何拨打这个一次性电话?这样的 "onload" 调用在 django 框架中有位置吗?或者我只是在第一个请求从数据库提供服务时以惰性方式触发它,但触发整个 table 的 Redis 加载?
更新呢?如果数据库 table 以某种方式更新(例如删除行、更新行、添加行),我如何捕获它以更新它的 Redis 表示?
是否有专门针对此的最佳实践或库?
how do I one-time load
对于一次性加载,您可以找到答案 here (from those answers only urls.py worked for me). But I prefer another scenario. I would create manage command,我会将此脚本添加到您启动 Gunicorn 的命令中。例如,如果您使用的是 systemd,则可以将其添加到服务服务配置中。您还可以组合这些,例如添加命令并从 urls.py
调用它
What about updates
这真的取决于你的数据库。例如,如果您使用 postgresql,则可以为 update/insert/delete 和外部 table 创建触发器作为 redis。 django 也有 signal 机制,所以你也可以在 django 中实现它。您还可以编写自定义包装器。在这个包装器中,您可以实现操作 + 与 redis 同步。你会调用 wrapper 而不是。但我更喜欢第一种情况。
Is there a best-practice or library already geared toward exactly
that?
抱歉,这件事我帮不了你。
我有一个带有 Redis 的 Django 应用程序,目前用作 Celery 的代理,仅此而已。
我想进一步利用它进行查找缓存。
假设我的数据库中有一个广泛使用的 table,我一直在查找它。对于相同的示例,假设它是 U.S 的映射。 city/state 名称的邮政编码,或任何可能随时间变化的查询,这对我的应用程序很重要。
我的问题是:
服务器启动后(在我的例子中是 Gunicorn),我如何一次性将数据从数据库 table 加载到 Redis。我的意思是 - 我在哪里以及如何拨打这个一次性电话?这样的 "onload" 调用在 django 框架中有位置吗?或者我只是在第一个请求从数据库提供服务时以惰性方式触发它,但触发整个 table 的 Redis 加载?
更新呢?如果数据库 table 以某种方式更新(例如删除行、更新行、添加行),我如何捕获它以更新它的 Redis 表示?
是否有专门针对此的最佳实践或库?
how do I one-time load
对于一次性加载,您可以找到答案 here (from those answers only urls.py worked for me). But I prefer another scenario. I would create manage command,我会将此脚本添加到您启动 Gunicorn 的命令中。例如,如果您使用的是 systemd,则可以将其添加到服务服务配置中。您还可以组合这些,例如添加命令并从 urls.py
调用它What about updates
这真的取决于你的数据库。例如,如果您使用 postgresql,则可以为 update/insert/delete 和外部 table 创建触发器作为 redis。 django 也有 signal 机制,所以你也可以在 django 中实现它。您还可以编写自定义包装器。在这个包装器中,您可以实现操作 + 与 redis 同步。你会调用 wrapper 而不是。但我更喜欢第一种情况。
Is there a best-practice or library already geared toward exactly that?
抱歉,这件事我帮不了你。