Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: class memcached

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: PHP, memcached
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 01:38:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. class mcache {
  2.         private $host;
  3.         private $port;
  4.         private $key;
  5.         private $cache;
  6.         private $time;
  7.         public function __construct($key,$host = "127.0.0.1",$port = 12345) {
  8.                 $this->key = $key;
  9.                 $this->host = $host;
  10.                 $this->port = $port;
  11.                 $this->connect();
  12.                 }
  13.         private function connect() {
  14.                 $i = 0;
  15.                 while ($i < 3) {
  16.                         $this->cache = memcache_connect($this->host,$this->port);
  17.                         if ($this->cache) break;
  18.                         else { $i++; sleep(1); } // ждем 3 секунды, иначе шло бы оно...
  19.                         }
  20.                 }
  21.         public function lock() {
  22.                 return memcache_set($this->cache,"lock_".$this->key,1,0,10);
  23.                 }
  24.         public function unlock() {
  25.                 return memcache_delete($this->cache,"lock_".$this->key);
  26.                 }
  27.         public function read() {
  28.                 return memcache_get($this->cache,$this->key);
  29.                 }
  30.         public function write($data,$time = 10) {
  31.                 return memcache_set($this->cache,$this->key,$data,0,$time);
  32.                 }
  33.         public function wread() {
  34.                 while (true) {
  35.                         if (!memcache_get($this->cache,"lock_".$this->key)) break;
  36.                         usleep(100000);
  37.                         }
  38.                 return $this->read();
  39.                 }
  40.         public function wwrite($data,$time = 10) {
  41.                 while (true) {
  42.                         if (!memcache_get($this->cache,"lock_".$this->key)) break;
  43.                         usleep(100000);
  44.                         }
  45.                 return $this->write($data,$time);
  46.                 }
  47.         public function clear() {
  48.                 return memcache_delete($this->cache,$this->key);
  49.                 }
  50.         public function close() {
  51.                 return memcache_close($this->cache);
  52.                 }
  53.         }
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 07:10:01
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




А в чем смысл использования?
И еще маленький совет. если на сервере два разных ресурса с одним именем сохранят ключ, то предыдущий будет заменяться. Т.е. разделение по хосту не предусмотрено по умолчанию. Если это не принять во внимание, то запустив копии класса сразу на 2 хостах сервера, выйдет не желаемый результат и даже можно вытянуть конфиденциальные данные с другого сайта, если такие хранятся в кэше.
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 09:40:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN пишет:
то предыдущий будет заменяться

Ну да - по типу mysql_query("UPDATE SET.....
ALEN пишет:
конфиденциальные данные

Туда лучше помещать часто запрашиваемые.
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 10:07:24
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar пишет:
Туда лучше помещать часто запрашиваемые.

Страшно если ты будешь кэшировать настройки с подключением к БД в незашифрованном виде, тогда я арендую на том же сервере где и ты, введу нечто:

и получу то, что ты записывал у себя через скрипт с ключом "config" - вот и умай тут про безопасность...
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 10:28:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN, туда помещаются только РЕЗУЛЬТАТЫ запросов в базу или даже готовые страницы, скажем та же карта сайта..
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 10:39:23
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
Я просто дал пищу для размышления и указал на ошибку с созданием имен ключей
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 15:07:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN пишет:
я указал на ошибку с созданием имен ключей

Это не ошибка - это специфика работы с memcached.
Для того что ты указал, есть другая штука.
Работа с сегментами разделяемой памяти:
PHP:
скопировать код в буфер обмена
  1.  
  2. class shared {
  3.         private $sem;
  4.         private $shm;
  5.         private $semkey;
  6.         private $shmkey;
  7.         public function __construct($semkey,$shmkey,$shmsize) {
  8.                 $this->semkey = $semkey;
  9.                 $this->shmkey = $shmkey;
  10.                 $this->shm = shm_attach($this->shmkey,$shmsize,0660);
  11.                 }
  12.         function lock() {
  13.                 $this->sem = sem_get($this->semkey,1,0660);
  14.                 sem_acquire($this->sem);
  15.                 }
  16.         function unlock() {
  17.                 sem_release($this->sem);
  18.                 }
  19.         function write($data) {
  20.                 shm_put_var($this->shm,$this->shmkey,$data);
  21.                 }
  22.         function fswrite($data) {
  23.                 $this->lock();
  24.                 shm_put_var($this->shm,$this->shmkey,$data);
  25.                 $this->unlock();
  26.                 }
  27.         function read() {
  28.                 $data = shm_get_var($this->shm,$this->shmkey);
  29.                 return $data;
  30.                 }
  31.         function fsread() {
  32.                 $this->lock();
  33.                 $data = $this->read();
  34.                 $this->unlock();
  35.                 return $data;
  36.                 }
  37.         function clear() {
  38.                 sem_acquire($this->sem);
  39.                 shm_remove($this->shm);
  40.                 sem_release($this->sem);
  41.                 }
  42.         }
  43.  

Тут ошибок создания "дубликата" или перезаписи значения не будет.
ALEN пишет:
если на сервере два разных ресурса с одним именем сохранят ключ, то предыдущий будет заменяться

Это тоже специфика memcached.
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 15:32:45
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
А для чего эта специфика? что она дает? Уменьшение кода - нет. Новые возможности - нет.
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 15:38:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN, мы снова сейчас начнем говорить о манерах и удобстве Радость
Я же не призываю использовать это везде.
К тому же, если это придумано, значит кому-то было нужно.
Ситуации разные бывают, может и пригодится.
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 20:18:49
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
Я ничего не имею против, но реально не могу понять для чего класс, чем он отличается от встроенного класса "Memcache":

Memcache модуль обеспечивает удобный процедурных и объектно-ориентированный интерфейс Memcached, высоко эффективное кэширование, которое было специально разработано для уменьшения загрузки на базы данных в динамических веб-приложений[dot]
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $memcache = new Memcache;
  4. $memcache->connect('localhost', 11211) or die ("Could not connect");
  5.  
  6. $version = $memcache->getVersion();
  7. echo "Server's version: ".$version."<br/>\n";
  8.  
  9. $tmp_object = new stdClass;
  10. $tmp_object->str_attr = 'test';
  11. $tmp_object->int_attr = 123;
  12.  
  13. $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
  14. echo "Store data in the cache (data will expire in 10 seconds)<br/>\n";
  15.  
  16. $get_result = $memcache->get('key');
  17. echo "Data from the cache:<br/>\n";
  18.  
  19. var_dump($get_result);
  20.  
  21. ?>


По факту в стандарте более гибкий класс.
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 21:23:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN пишет:
чем он отличается от встроенного

Наличием блокировки при перезаписи значения...
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 21:43:08
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
Кто мешает ее дописать так же ручками, а вообще не понимаю для чего она нужна?
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 22:33:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN пишет:
Кто мешает ее дописать так же ручками

Так я и дописал Радость
ALEN пишет:
для чего она нужна?

Для работы с memcached Радость
 
 Top
ALEN Модератор
Отправлено: 19 Марта, 2011 - 22:35:19
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




честно говоря, шило на мыло)))
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Марта, 2011 - 22:48:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN пишет:
шило на мыло

Есть мысли сделать лучше? Выкладывай код Закатив глазки
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB