activar - ¿Se puede almacenar una matriz de PHP en Memcache?
memcached windows (4)
El tamaño máximo de almacenamiento de un elemento en memcache es 1.048.576 Bytes (1 MB), la serialización de una matriz toma un poco de espacio.
Si fueras a estructurar tu matriz tan simplemente como:
array(
[0] => 1,
[1] => 2,
[2] => 3
)
la clave se genera automáticamente y el valor es el ID de usuario.
una matriz serializada de 5000 usuarios numerados del 1 al 5 000 con esta estructura tiene una longitud de cadena de 67792 caracteres, 50000 usuarios produce una matriz de 777794 caracteres.
la numeración de 100000 a 150000 produce una cadena serializada de 838917 caracteres.
por lo tanto, en 50k usuarios (como se menciona en su pregunta anterior), es probable que esté por debajo del límite de 1 MB. Sin embargo, si tiene un caché local (APC, etc.), use ese lugar, o si por alguna razón NO necesita todos los ID a la vez, le sugeriría que dividiera los resultados o simplemente usara la base de datos.
también piense en la estructura de datos que está almacenando en memcached. Si está usando el caché simplemente para darle una lista de claves principales para buscar, ¿necesita los otros datos?
¿Se puede almacenar una matriz en Memcache?
Me gustaría almacenar;
- Un número de identificación de usuario
- URL de la foto de un usuario
- Un nombre de usuario
Juntos como una matriz, alguien me dijo que podías y luego alguien me dijo que no podías ¿Cuál es?
Puedes almacenar casi lo que quieras en memcached.
Consulte la documentación de memcache::set
, que dice:
bool Memcache::set(string $key, mixed $var [, int $flag [, int $expire ]] )
var
The variable to store. Strings and integers are stored as is, other types
Se almacenan en serie.
Entonces, sí, puede almacenar una matriz, o incluso un objeto si es necesario :-)
Por cierto, es lo mismo con Memcache::add
y Memcache::replace
Sí.
Memcache::set(''someKey'', array(
''user_id'' => 1,
''url'' => ''http://'',
''name'' => ''Dave''
));
Por favor vea la documentation para ejemplos muy detallados.
$memcache = new Memcache;
$memcache->connect(''127.0.0.1'', 11211) or die ("Could not connect");
$id = $_REQUEST[''name''];
$key = md5("SELECT * FROM memc where FirstName=''{$id}''");
$get_result = array();
$get_result = $memcache->get($key);
if ($get_result) {
echo "<pre>/n";
echo "FirstName: " . $get_result[''FirstName''] . "/n";
echo "Age: " . $get_result[''Age''] . "/n";
echo "</pre>/n";
} else {
$query="SELECT * FROM memc where FirstName=''{$id}''";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo "<pre>/n";
echo "FirstName: " . $row[1] . "/n";
echo "Age: " . $row[3] . "/n";
echo "Retrieved from the Database/n";
echo "</pre>/n";
$memcache->set($key, $row, MEMCACHE_COMPRESSED, 60);
mysql_free_result($result);
}
agregue la configuración de la base de datos de cambio de acuerdo con su requisito, código probado, por favor