Um monte de wordpress não relacionado usando o mesmo memcached não armazena corretamente seus dados

Antes de começar, tenho que avisar o leitor: cuidado com o d !

Em um único servidor web (CentOS 6.3) usando php-5.3.3 Tenho vários sites WordPress não relacionados (3.5), cada um possui seu próprio DB (Mysql5.1) para que o table_prefix seja o mesmo (“wp_”) .

Para pregar o wordpress, penso em APC para o código e um backend do memcache para os dados, então no meu servidor web eu compilei e instale o libmemcached-1.0.15 e (usando “pecl install”) php-pecl-memcached 2.1.0 (preste atenção ao final ” d “). Como wp-plugin eu usei ” memchached redux “.

Em dois servidores diferentes (CentOS 6.3) eu compilei e instiei o daemon do backend do memcached-1.4.15.

O problema

Primeiro entre no wp.first-domain.com e tudo está bem. Quando eu tento fazer logon no wp.second-domain.net , encontrei-me redirect no wp.first-domain.com !

Se eu limpar o cache memcached, posso fazer o login no wp.second-domain.net , mas, em seguida, todos os outros wp tentamos fazer o login redirect-me no wp.second-domain.net .

No meu wp-config.php eu uso essas configurações:

// server list definition $GLOBALS['memcached_servers']= array("memcache1.internal:11211","memcache2.internal:11211",); // try to add a server-related prefix $GLOBALS['blog_id']=$_SERVER['SERVER_NAME']; ini_set('memcached.sess_prefix','memc.sess.key.'.$_SERVER['SERVER_NAME'].'.'); 

IMHO o wp não armazena os dados com um prefixo / sal significativo para que um blog chegue em outros dados do blog!

O trabalho ao redor

Como solução alternativa, intormei o wp-plugin ” Memcached Object Cache “, que usa php-pecl-memcache (2.2.7) (observe o ” d ” faltando) e o seguinte código na configuração:

 define( 'WP_CACHE_KEY_SALT', $_SERVER['SERVER_NAME'] ); 

Eu acho que sinto falta de alguns set-up de memcached-redux, mas não exclui uma funcionalidade ausente (ou um bug).

ADICIONAR

O objective final é usar php-pecl-memcached, então meu trabalho pode ser a solução.

Solutions Collecting From Web of "Um monte de wordpress não relacionado usando o mesmo memcached não armazena corretamente seus dados"

Se o WordPress estiver usando a APC, ele usará o seu cache de objects, e como a APC é por máquina, não por cluster, os dois divergem, dando-lhe problemas se você estiver tentando executar 1 site fora de duas máquinas.

Nesse cenário, você quer 1 desarmamento Memcached em execução e configure seus 2 servidores para usar a 1 instância.

Mas você mencionou 2 servidores com sites não relacionados.

Então, neste caso, temos o mesmo problema que aqui:

http://wordpress.org/support/topic/many-wp-installations-on-the-same-server

O autor do plugin diz:

Por padrão, deveria. Mas isso requer que você use prefixos de tabela únicos (Eles não podem ser wp_).

Para usá-lo em muitos sites onde os prefixos da tabela são iguais, você pode adicionar uma constante ao wp-config.php chamado WP_CACHE_KEY_SALT, como:

define (‘WP_CACHE_KEY_SALT’, md5 (DB_NAME. FILE ));

md5 (DB_NAME. FILE ) pode ser substituído por tudo o que quiser, desde que seja exclusivo por site.

Então, na verdade, você já se deparou com a solução para o memcache e a causa.

Então, talvez, se você renomear seus prefixos de tabela para que eles sejam únicos, o memcached funcionará

Para elaborar, se olharmos para o método de chave de plugins memcachedredux:

 function key( $key, $group ) { if ( empty( $group ) ) $group = 'default'; if ( false !== array_search( $group, $this->global_groups ) ) $prefix = $this->global_prefix; else $prefix = $this->blog_prefix; return preg_replace( '/\s+/', '', "$prefix$group:$key" ); } 

e mais tarde no construtor:

  global $blog_id, $table_prefix; $this->global_prefix = ''; $this->blog_prefix = ''; if ( function_exists( 'is_multisite' ) ) { $this->global_prefix = ( is_multisite() || defined( 'CUSTOM_USER_TABLE' ) && defined( 'CUSTOM_USER_META_TABLE' ) ) ? '' : $table_prefix; $this->blog_prefix = ( is_multisite() ? $blog_id : $table_prefix ) . ':'; } 

Aqui vemos que o prefixo é ” ou é o ID do blog ou o prefixo da tabela.

Como tal, não há manipulação de vários sites -> 1 memcached. Então mude os prefixos da sua mesa, teste se ela funciona. Se não, então você precisará modificar o plugin