当前位置:  开发笔记 > 编程语言 > 正文

如果我想在memcache中存储None值怎么办?

如何解决《如果我想在memcache中存储None值怎么办?》经验,为你挑选了1个好方法。

这与Google App Engine Memcache API特别相关,但我确信它也适用于其他Memcache工具.

字典.get()方法允许您指定默认值,例如dict.get('key','defaultval')

如果您可能希望将None存储为字典中的值,则此选项非常有用.

但是,memcache.get()不允许您这样做.我修改了我的@memoize装饰器,所以它看起来像这样:

def memoize(keyformat, time=1000000):

    """Decorator to memoize functions using memcache."""
    def decorator(fxn):
        def wrapper(*args, **kwargs):
            key = keyformat + str(args[1:]) + str(kwargs)
            from google.appengine.api import memcache
            data = memcache.get(key)
            if Debug(): return fxn(*args, **kwargs) 
            if data:
                if data is 'None': data =  None
                return data
            data = fxn(*args, **kwargs)
            if data is None: data = 'None' 
            memcache.set(key, data, time)
            return data
        return wrapper
    return decorator  

现在我确定有一个很好的论据,我不应该首先存储None值,但是现在让我们把它放在一边.除了将无val转换为字符串并返回之外,还有更好的方法可以解决这个问题吗?



1> Dana the San..:

一种可能的方法是创建None为此目的定义的新类,并将其实例分配给缓存(遗憾的是,您无法扩展None).或者,您可以使用空字符串"",或者完全避免存储None/null值(缺少键意味着None).

然后检查你的"无"类的实例,当你检查的结果mc.get(key)(is None,== "",等)

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有