Перейти к публикации

Блог TheAndrey

  • записей
    6
  • комментария
    22
  • просмотра
    2 024

DLE & Memcache

TheAndrey

498 просмотров

Так как имеется свой VDS решил установить memcache. После этого я включил его использование в настройках DLE. На главной админки я вижу сообщение:

Внимание:

Вы включили в настройках сервера кеширование Memcache, при этом по указанным в настройках скрипта параметрам, скрипту не удалось подключиться к Memcache. Проверьте работоспособность сервера Memcache, а также правильность настроек подключения к нему в настройках скрипта. В противном случае включите файловое кеширование в настройках скрипта.

:wondering:

 

Пришлось исправлять косяки разрабов длешки. Проблему решил заменой функций работы с memcached на memcache class.

 

Открываем файл engine/modules/functions.php

Находим:

if ( $config['cache_type'] ) {

if ( function_exists('memcache_connect') ) {

	$memcache_server = explode(":", $config['memcache_server']);

	$mcache = @memcache_connect( $memcache_server[0], $memcache_server[1] );

	if( $mcache AND function_exists('memcache_set_compress_threshold') )
	{
		memcache_set_compress_threshold( $mcache, 20000, 0.2 );
	}

}

}

Заменяем на:

if ( $config['cache_type'] ) {

if ( class_exists('Memcache') ) {

 $memcache_server = explode(":", $config['memcache_server']);
 $mcache = true;
 $memcache = new Memcache;
 $memcache->connect($memcache_server[0], $memcache_server[1]) or $mcache = false;
 if( $mcache )
 {
  $memcache->setCompressThreshold(20000, 0.2 );
 }
}
}

 

Находим:

global $config, $is_logged, $member_id, $mcache;

(эта строка встретися вам два раза - заменяем в обоих) Заменяем тут $mcache; на $mcache, $memcache;

 

Находим:

return memcache_get( $mcache, md5( DBNAME . PREFIX . md5(DBUSER) .$key ) );

Заменяем на:

return $memcache->get(md5( DBNAME . PREFIX . $key ));

 

Находим:

memcache_set( $mcache, md5( DBNAME . PREFIX . md5(DBUSER) .$key ), $cache_text, MEMCACHE_COMPRESSED, 86400 );

Заменяем на:

$memcache->set(md5( DBNAME . PREFIX . $key ), $cache_text, MEMCACHE_COMPRESSED , 86400);

 

Ищем

memcache_flush($mcache);

Меняем на:

$memcache->flush();

Сохраняем и закрываем этот файл.

 

Теперь идём препарировать файл: engine/inc/include/functionc.inc.php :grin:

 

Ищем:

if ( $config['cache_type'] ) {

if ( function_exists('memcache_connect') ) {

	$memcache_server = explode(":", $config['memcache_server']);

	$mcache = @memcache_connect( $memcache_server[0], $memcache_server[1] );

	if( $mcache AND function_exists('memcache_set_compress_threshold') )
	{
		memcache_set_compress_threshold( $mcache, 20000, 0.2 );
	}

}

}

Меняем на:

if ( $config['cache_type'] ) {
if ( class_exists('Memcache') ) {

	$memcache_server = explode(":", $config['memcache_server']);
	$mcache = true;
	$memcache = new Memcache;
	$memcache->connect($memcache_server[0], $memcache_server[1]) or $mcache = false;

	if( $mcache AND function_exists('memcache_set_compress_threshold') )
	{
		memcache_set_compress_threshold( $mcache, 20000, 0.2 );
	}

}

}

 

Чуток ниже находим:

global $mcache;

Заменяем вот этим:

global $mcache, $memcache;

Ещё ниже меняем:

memcache_flush($mcache);

На:

$memcache->flush();

На этом правка файлов закончена. :)

 

Теперь, после колдования над файлами сообщение должно исчезнуть.

Нажимаем кнопку "Очистить кеш". Теперь смотрим, что у нас в папке engine/cache

Если там нет файлов *.tmp значит memcache работает. Хотя и при включённом memcache некоторые модули могут создавать там файлы. Но файлов будет гораздо меньше, чем при отключённом Memcache.



3 комментария


Рекомендованные комментарии

А чем memcache отличается от файлового кеша?)

Поделиться комментарием


Ссылка на комментарий

Данные хранятся в оперативной памяти. К ней доступ быстрее, чем к жёсткому диску.

Разница в скорости небольшая, поэтому вы её не заметите. Memache практичнее :good:

Поделиться комментарием


Ссылка на комментарий

Недочёт нашел, в функции clear_cache(которая находиться в engine/modules/functions.php) нужно ещё заменить

global $mcache;

на

global $mcache, $memcache;

В функциях админки описал про это а в функциях сайта нет.

Поделиться комментарием


Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Создать...