使用多个节点和无限TTL时,从memcached返回旧值

时间:2016-10-18 19:31:38

标签: memcached amazon-elasticache python-memcached

我遇到了一个问题,我有一个python-memcached客户端连接到ElastiCache上的3个memcached节点。我有一些具有无限TTL的缓存值,并且在更新数据源时会覆盖它们。缓存也写入缓存未命中。

问题有时是memcached返回的旧缓存值。我最好的猜测是:

  1. "富"写入memcached A。
  2. memcached A在流程#1中暂时不可用,因此被标记为失败。
  3. 进程#1使用具有缓存未命中的memcached B,因此它会写入" bar" memcached B并返回该值。
  4. 进程#2能够连接到memcached A,并且不知道进程#1将其标记为坏节点,因此它连接并返回" foo"。
  5. 只要进程能够连接到memcached A" foo"返回,但任何时候它被临时标记为死的memcached B连接到" bar"得到了回报。
  6. 这里是失败导致选择新服务器的行: https://github.com/linsomniac/python-memcached/blob/release-1.57/memcache.py#L413

    我查看了pymemcached的哈希客户端,我认为它会做同样的事情:暂时删除一个memcached主机并尝试使用另一个主机。

    当主机永久删除时,这是有道理的,但当主机可能几秒钟不可用时,对我没有意义。我错过了什么吗?无限TTL是一个memcached反模式吗?

0 个答案:

没有答案