使用python字典作为临时内存中的键值数据库?

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)

不要关心网络延迟,因为这种优化会浪费你的时间。