Skip to content

Sequence cache #89

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 22 commits into from
Closed

Sequence cache #89

wants to merge 22 commits into from

Conversation

dovg
Copy link
Member

@dovg dovg commented Apr 23, 2012

Вот такая штука у нас родилась.

Включает в себя (в порядке следования в diff):

  • Assert::isObject()
  • ленивое подключение в PeclMemcache
  • таймауты коннекта и запроса в нем же
  • SequentialCache - такой хитрый CachePeer, который объединяет пул кешей и делегирует get запрос slave при мертвом мастере. Пишет при этом во все кеши. Может быть полезно при нестабильной сети или нестабильном memcache (как в нашем случае :)
  • тесты.

Тесты проходит.
Вольем?

@crazedr0m
Copy link
Contributor

А можно не трогать PeclMemcache ?
По тестам не видно что SequentialCache работает с чем-то кроме PeclMemcache, при этом у него в параметрах можно передать любой CachePeer

@dovg
Copy link
Member Author

dovg commented Apr 23, 2012

А можно не трогать PeclMemcache ?

Почему? BC же сохраняется.

По тестам не видно что SequentialCache работает с чем-то кроме PeclMemcache

Поддерживаю, добавим.


return $this;
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не догнал. То есть в процессе работы мы можем менять параметры подключения - хост, порт, таймаут?
И после того как мы установили соединение $this->instance->pconnect() или $this->instance->connect() мы еще раз устанавливаем таймаут?
Зачем?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То есть в процессе работы мы можем менять параметры подключения - хост, порт, таймаут?

Не, не. Смысл в том, что подключение производится только при необходимости.

мы еще раз устанавливаем таймаут?

Это ошибка. На самом деле там два вида таймаута - таймаут на подключение и таймаут на запрос. Можно задать оба.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну да, не заметил что $this->instance->setServerParams() а не $this->setServerParams(),

@crazedr0m
Copy link
Contributor

Меня все-таки смущает "ленивое подключение", не могу обосновать, что-то на уровне эмоций )
Почему именно в этом пире а в остальных нет?
Если это связано с тем что не к каждому слейву нужно подключаться SequentialCache то может это все-таки логика SequentialCache ?
Или может быть имеет смысл сделать посредника который сможет работать с любым пиром?

@dovg
Copy link
Member Author

dovg commented Apr 24, 2012

Почему именно в этом пире а в остальных нет?

Ну потому, что лень в этом пире нужна нам, а в остальных не очень :) Может быть кто-то другой (тот, кто пользуется) это допишет.

Если это связано с тем что не к каждому слейву нужно подключаться SequentialCache то может это все-таки логика SequentialCache ?

Это может быть полезно для последовательного кеша и всех реализаций аггрегатных кешей. Допустим у тебя 10 пиров в AggragateCache, но за время жизни скрипта ты делаешь всего один get к ним. Зачем еще 19 подключений? Это же трата ресурсов.

Или может быть имеет смысл сделать посредника который сможет работать с любым пиром?

У нас была задумка сделать декоратор/прокси - LazyObject, который бы делегировал все вызовы внутреннему классу, создавая его при первой необходимости. Но там оверхед получался.

ps. Тесты сейчас добавлю.

@crazedr0m
Copy link
Contributor

А если мне не нужно "ленивое" подключение, я должен сразу после создания дернуть какой-нибудь метод, например isAlive() ...
Ну может и так. Но мне все равно не нравится )

@dovg
Copy link
Member Author

dovg commented Apr 24, 2012

А если мне не нужно "ленивое" подключение,

А зачем тебе это? ;)

@dovg
Copy link
Member Author

dovg commented Apr 24, 2012

Обновил тесты, теперь они стали более лучше одеваться^W объяснять примеры использования.

@AlexeyDsov
Copy link
Member

Все смотрю и задумываюсь - а надо ли в конструкторе добавлять новый аргумент? Может правильней было б его через отдельный setter задавать. Тем более что в этом lazy варианте теперь соединение устанавливается не в конструкторе.

@dovg
Copy link
Member Author

dovg commented Apr 24, 2012

Мы же пишем враппер для http://ru2.php.net/manual/en/memcache.connect.php, там в конструкторе три параметра. Я тут ничего плохого не вижу. Алсо есть значение по-умолчанию, что дает сохранение обратной совместимости.

@AlexeyDsov
Copy link
Member

@dovg разве до изменений оно коннектилось с таймаутом? Теперь же если создавать так же с двумя параметрами класс, то коннектиться к мемкешу он будет с тайматом.

@AlexeyDsov
Copy link
Member

Хм, не прав. BC сохраняется в этом случае тоже.

@dovg
Copy link
Member Author

dovg commented Apr 26, 2012

Друзья, если нет возражений по существу, то я это волью.
Спасибо за понимание :)

@@ -147,10 +166,58 @@ public function append($key, $data)
Assert::isUnreachable();
}

/**
* @param float $requestTimeout time in seconds
* @return \PeclMemcached
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут слэшик лишний, пожалуй. и еще кой-где в diff'е встречается этот признак нетбинса

@dovg
Copy link
Member Author

dovg commented Apr 26, 2012

закрываю в пользу #93

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants