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

时间:2015-03-08 01:35:22

标签: python django caching

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

到目前为止,每次用户搜索某个城市时,我会查看字典以查看该城市是否存在,如果不是,我只需要向Google的地理编码器询问该位置(通过地理图书馆)。

由于查询区域很小,Google的地理编码表现不佳;如果你甚至弄乱了一个角色,那么搞砸搜索真的很容易,而且我必须进行大量检查以确保地理编码阶段不会中断。

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

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

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

1 个答案:

答案 0 :(得分:1)

读取文件会起作用,但随着每秒请求数开始增加,它会变慢。

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

对于您的情况,每次用户搜索城市时,您都会检查Redis是否为密钥(城市名称为字符串或ID,无论您希望如何),如果存在,请使用它具有的任何值(坐标?)该城市密钥,否则回退到地理编码器,并使用地理编码器的结果向Redis添加新密钥。

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