use*_*575 5 python caching key-value-store
我需要像临时内存键值存储一样的东西.我知道有像Redis这样的解决方案.但我想知道使用python字典是否可行?可能更快?因此,想想一个Tornado(或类似的)服务器在内存中运行并保存python字典,并根据HTTP请求返回适当的值.
为什么我需要这个?作为服务的一部分,存储了关键值,但它们具有此属性:它们越新,它们就越有可能被访问.所以我想在内存中保留最后100个键值(以及写入磁盘)以便更快地检索.
如果服务器死亡,则可以从磁盘再次恢复字典.
有没有人做过这样的事情?我在这里完全错过了什么吗?
PS:我认为使用WSGI服务器是不可能的,对吧?因为据我所知,你不能在个别请求之间保留内存.
小智 4
我肯定会使用 memcached。设置完成后,您可以轻松地装饰您的函数/方法,就像我的示例中所做的那样:
#!/usr/bin/env python
import time
import memcache
import hashlib
def memoize(f):
def newfn(*args, **kwargs):
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
# generate md5 out of args and function
m = hashlib.md5()
margs = [x.__repr__() for x in args]
mkwargs = [x.__repr__() for x in kwargs.values()]
map(m.update, margs + mkwargs)
m.update(f.__name__)
m.update(f.__class__.__name__)
key = m.hexdigest()
value = mc.get(key)
if value:
return value
else:
value = f(*args, **kwargs)
mc.set(key, value, 60)
return value
return f(*args)
return newfn
@memoize
def expensive_function(x):
time.sleep(5)
return x
if __name__ == '__main__':
print expensive_function('abc')
print expensive_function('abc')
Run Code Online (Sandbox Code Playgroud)
不要关心网络延迟,因为这种优化会浪费你的时间。