酸洗后带有memcache的Django对象缓存

时间:2021-06-07 17:25:16

标签: python django memcached pymemcached

我试图缓存一个 Django 模型实例

class MyModel(models.Model):
   ...
   several atributes, as well as foreign key attributes
   ...

from pymemcache.client import base
import pickle
obj = MyModel.objects.first()
client = base.Client(("my-cache.pnpnqe.0001.usw2.cache.amazonaws.com", 11211))
client.set("my-key", pickle.dumps(obj), 1000) # 1000 seconds

# and to access I use
obj = pickle.loads(client.get("my-key"))

它们都工作正常,但有时会执行同一行:

client.get("my-key")

产生非常非常奇怪的错误。(不同的错误,如 KeyError、OSError)像

Traceback (most recent call last):
  File "/opt/python/current/app/proj/utils/Cache.py", line 93, in get_value
    return Cache.client.get(key, None)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 481, in get
    return self._fetch_cmd(b'get', [key], False).get(key, default)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 823, in _fetch_cmd
    prefixed_keys)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 791, in _extract_value
    key = remapped_keys[key]
KeyError: b'some-other-cache-key'

有时我会得到:

Traceback (most recent call last):
  File "/opt/python/current/app/proj/utils/Cache.py", line 93, in get_value
    return Cache.client.get(key, None)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 481, in get
    return self._fetch_cmd(b'get', [key], False).get(key, default)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 833, in _fetch_cmd
    raise MemcacheUnknownError(line[:32])

有时,我明白

回溯(最近一次调用最后一次):

  File "/opt/python/current/app/proj/utils/Cache.py", line 93, in get_value
    return Cache.client.get(key, None)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 481, in get
    return self._fetch_cmd(b'get', [key], False).get(key, default)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 823, in _fetch_cmd
    prefixed_keys)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 790, in _extract_value
    buf, value = _readvalue(self.sock, buf, int(size))
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 1234, in _readvalue
    buf = _recv(sock, RECV_SIZE)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/pymemcache/client/base.py", line 1257, in _recv
    return sock.recv(size)
OSError: [Errno 9] Bad file descriptor

我不想存储数据,是否有任何修复方法或任何其他不会产生此错误的酸洗方式。

0 个答案:

没有答案