在Django-Python的内存中维护一个大字典?

Yug*_*dle 10 python django memcached dictionary redis

我有一个很大的key-value对转储,我需要查找我的django-Python webapp.

所以,我有以下选择:

  • 将其存储为json dump并将其加载为python dict.
  • 将它存储在dump.py中从中导入dict.
  • 使用一些目标系统来解决这个问题:[这些是否真的适用于这个用例?]
    • MEM-缓存
    • Redis的
    • 还有其他选择吗?

从上面来说哪条路是正确的?

你如何比较memcache和redis?

更新:

  • 我的字典大小约为5 MB,并且会随着时间的推移而增长.
  • 使用Redis/Memcache会增加每次点击套接字的开销,因此dump.py会更好,因为将它加载到内存需要时间,但之后它只会进行内存查找.

  • 我的字典需要每天更新,考虑到dump.py会有问题,因为我们必须重新启动django-server重新加载,因为我猜它会在redis和memcache中动态反映.

  • 只有在你拥有大量数据并且必须非常频繁地查找时才会使用类似redis的系统,在这种情况下,套接字会产生开销,那么我们如何实现这一优势?

请分享您的经验!

var*_*tec 7

对于选择Memcache或REDIS,它们在低端硬件上每秒可以提供数万个请求(例如,对于C2D Q8300上的REDIS,为80,000 req/s).延迟远低于1ms.你说的是你要按照20秒的要求做一些事情,所以表现明智,这真的不是问题.

如果选择dump.py选项,则无需重新启动Django即可重新加载.您可以制作自己的简单重新加载器:

dump.py:

[ dict code...]

mtime = 0
Run Code Online (Sandbox Code Playgroud)

djago代码:

import dump #this does nothing if it's already loaded
stat = os.stat(dump_filename)
if(stat.mtime > dump.mtime):
    reload(dump)
    dump.mtime = stat.mtime
Run Code Online (Sandbox Code Playgroud)