Memcached 引发奇怪的密钥错误

问题描述 投票:0回答:1

免责声明:我对 memcached 非常陌生,所以这对我来说可能是一个愚蠢的错误。在我的实习中,我使用的是 pymemcache 1.2.9。我从以前的实习生那里继承了一个项目,我无法轻易联系到他,而且与我一起工作的人都不了解这个项目。

密钥以相当简单的方式添加到本地托管的缓存中 - 密钥是一个字符串,数据是来自我们正在使用的 google API (geopy) 的字符串。但是,当我尝试查看缓存中是否存在该密钥时:

    if not cache.get(key):
         #python stuff
         cache.add(key, values)

这大约有一半的时间有效,其余时间我会收到此错误:

    Exception in thread Thread-1:
     Traceback (most recent call last):
      File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
       File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
   File "card_visualization.py", line 69, in fetcher_thread
if not cache.get(key):
   File "/home/arnold/.virtualenvs/datavis/local/lib/python2.7/site-packages/pymemcache/client.py", line 458, in get
return self._fetch_cmd(b'get', [key], False).get(key, None)
  File "/home/arnold/.virtualenvs/datavis/local/lib/python2.7/site-packages/pymemcache/client.py", line 723, in _fetch_cmd
key = checked_keys[key]
 KeyError: 'my_acceptable_key'

令人困惑的是,不同的键会导致此错误,而且这种错误的发生完全没有规律性。

python-2.7 caching memcached
1个回答
0
投票

有同样的错误,似乎在使用多处理时,有时只会在现有键上出现缓存未命中。

Pymemcache 提供重试客户端 https://pymemcache.readthedocs.io/en/latest/getting_started.html#using-the-built-in-retrying-mechanism

或者你可以直接写一个 try - 除了重试获取密钥 10 次,因为错过的几率非常低,并且当它确实发生时,再次执行相同的请求通常会起作用并且延迟非常小。

© www.soinside.com 2019 - 2024. All rights reserved.