Django - 寻找缓存字典的好方法

Django - Looking for a good way to cache a dictionary

在我正在做的一个 Django 项目中,用户可以按城市搜索兴趣点。可以进行搜索的区域相对较小(大约 400-500 个城市),我有一本字典,其中有大约 300 个城市的记录。

到目前为止,每次用户搜索城市时,我都会查看字典以查看该城市是否存在,如果不存在,我就向 Google 的地理编码器询问位置(通过geopy 库)。

由于查找区域很小,Google 的地理编码表现不佳;如果你连一个字符都搞砸了,很容易搞砸搜索,我不得不进行大量检查以确保地理编码阶段不会中断。

我想改变这种行为并越来越少地依赖地理编码器,方法是将一个城市添加到字典中(如果它之前不在字典中)。因此,必须对字典进行 pickle、保存到文件中,然后加载、更新(通过地理编码数据)并最终在遇到新城市时再次保存。

我有点担心表演,这种行为是否意味着麻烦(至少在第一期,字典中可能找不到新城市)?我应该以另一种方式缓存字典还是采用完全不同的方法?

任何意见都会有很大的帮助,谢谢。

读取文件可以,但随着每秒请求数开始增加,速度会变慢。

考虑使用 Redis。它是一个增压字典和缓存,可用于存储键值对等(集合、列表、字符串、哈希)。它主要在内存中运行,但也可以存储到磁盘并重新加载。

对于你的情况,每次用户搜索一个城市时,你检查 Redis 的键(城市名称作为字符串或 ID,但是你想要),如果它存在,使用它的任何值(坐标?)具有该城市密钥,否则回退到地理编码器并使用地理编码器的结果向 Redis 添加新密钥。

还有一个用于 Redis 的 django 应用程序可以使它更容易:https://niwibe.github.io/django-redis/