PHP Memcached CAS (проверить и установить) проблема - PullRequest
0 голосов
/ 16 августа 2010

Привет всем, вот версия моей текущей настройки Memcached (1.2.2) Pecl Memcached Client 1.0.2 (с использованием libmemcached 0.43)

Проблема: я не могу получить токен cas, возвращенный во время запроса на получение

Вот код, о котором идет речь!

 27   public function action_test() {
 28     //phpinfo();
 29     $m = Model_Mem::getSingleton();
 30     $found = $m->get('navigation');
 31     echo (int)count($found).'<br />'; // Returns an array of navigation objects
 32
 33     $cas = 0;
 34     $found = $m->get('navigation', null, &$cas);
 35     echo (int)count($found); // Returns nothing!
 36
 37     exit;
 38   }

Выход первого эхо-сигнала равен 7, а второй эхо-сигнал равен 1. Кроме того, переменная $ cas и переменная $ found из второй группы кода являются пустыми. Я не уверен на 100%, правильно ли я это делаю, но токен cas, похоже, вообще не работает для меня. Я просмотрел документацию php Memcached без упоминания о каком-либо флаге включения CAS, который я мог легко заметить. Я также попытался найти информацию на сайте memcached.org, но я потерян!

У меня никогда не было с этим проблем, просто каждый раз, когда я пытаюсь использовать функциональность cas при получении запроса, я делаю что-то не так. Спасибо, что помогли мне!

* EDIT Вот что функция Model_Mem :: getSingleton () возвращает

  static function getSingleton() {
    if (self::$m) 
      return self::$m;

    self::$m = new Memcached();

    $servers = array(
      array('127.0.0.1', 11211, 25),
      array('127.0.0.1', 11212, 25),
      array('127.0.0.1', 11213, 25),
      array('127.0.0.1', 11214, 25)
    );

    // Sets up some options for the memcache server
    self::$m->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
    self::$m->setOption(Memcached::OPT_PREFIX_KEY, Kohana::config('globals.prefix'));
    self::$m->addServers($servers);

    return self::$m;
  }

Ответы [ 2 ]

0 голосов
/ 23 декабря 2015

Просто К вашему сведению, CAS означает «сравнить и обменять»: https://en.wikipedia.org/wiki/Compare-and-swap

0 голосов
/ 16 августа 2010

Arg, последняя [безопасная] версия memcached Debian еще не имела этой функции.Обновлен до последней версии, установив исходный код сервера memcached, и все в порядке.

...