Pregunta

¿Puede almacenar una matriz en Memcache?

Me gustaría almacenar;

  1. Un número de ID de usuario
  2. URL de la foto de un usuario
  3. Un nombre de usuario

Juntos como una matriz, alguien me dijo que podías y luego alguien me dijo que no podías ¿Qué es?

¿Fue útil?

Solución

Sí.

Memcache::set('someKey', array(
    'user_id' => 1,
    'url' => 'http://',
    'name' => 'Dave'
));

Consulte la documentación para obtener ejemplos muy detallados.

Otros consejos

el tamaño máximo de almacenamiento de un elemento en memcache es 1,048,576 Bytes (1MB), la serialización de una matriz toma un poco de espacio.

si tuviera que estructurar su 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 que usa esta estructura tiene una longitud de cadena de 67792 caracteres, 50000 usuarios producen una matriz de 777794 caracteres.

la numeración 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 dividir los resultados o simplemente usar 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?

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");

$id = <*>

agregue la configuración de la base de datos de cambios de acuerdo con sus requisitos, código probado, intente

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 cambios de acuerdo con sus requisitos, código probado, intente

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í, puedes almacenar una matriz, o incluso un objeto si es necesario :-)


Por cierto, es lo mismo con Memcache :: add y Memcache :: replace

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top