PHP Una pregunta de matriz superglobal personalizada
-
27-10-2019 - |
Pregunta
Estaba leyendo, y sé que podría ser imposible lograrlo como deseaba que fuera, pero espero que haya una manera, así que aquí va ...
Tengo identificaciones de usuarios y tengo un recuento para cada uno. Me gustaría poder almacenar esos valores en la memoria de la máquina y actualizar el DB solo de vez en cuando, pero Absolutley no constantemente. Se accede a la página de muchos usuarios, por supuesto, y quiero que la matriz se mantenga relevante para cada usuario y se actualice según sea necesario. (Esa es otra razón por la que no quiero usar el DB. Las actualizaciones llevan tiempo con columnas indexadas, ¿verdad?)
una matriz como: $ my_superglobal_arr = ('1' => 304, '2' => 763, '6' => 12, '13 '=> 96); hubiera sido perfecto.
Alguna sugerencia ?
Gracias !
Solución
Las actualizaciones llevan tiempo con columnas indexadas, ¿verdad?
Derecha. Sin embargo, depende. Le sugiero encarecidamente que vaya a buscar la base de datos primero, obtenga experiencia práctica Con actualizaciones y cosas, aprenda qué cantidad particular de usuarios puede llamar "muchos". Y solo entonces decide, si realmente necesitas tu configuración inusual, ¿es realmente necesario o simplemente fantasías imaginarias?
Leer sus otras preguntas, solo puedo decir que aprender SQL primero es imprescindible.
Otros consejos
Necesitas unir ArrayAccess
con APC capacidades de almacenamiento en caché y emplear un Singleton
patrón.
class UserCounter implements ArrayAccess {
public static function getInstance()
{
static $instance;
if (!$instance) {
$instance = new self;
}
return $instance;
}
public function offsetSet($offset, $value)
{
apc_store(__CLASS__.$offset, $value);
}
public function offsetExists($offset)
{
return !!apc_fetch(__CLASS__.$offset);
}
public function offsetUnset($offset)
{
apc_delete(__CLASS__.$offset);
}
public function offsetGet($offset)
{
return apc_fetch(__CLASS__.$offset);
}
private function __construct() {}
private function __clone() {}
private function __wakeup() {}
}
Uso:
$user_counter = UserCounter::getInstance();
$user_counter[1] = $user_counter[1] + 1;
var_dump($user_counter[1]);
Salida en la primera solicitud:
int(1)
En el segundo:
int(2)
Cuando necesite guardar estos contadores en una base de datos:
$user_counter = UserCounter::getInstance();
foreach ($users as $user_id) {
store_counter_in_db($user_id, $user_counter[$user_id]);
}
Nota: Hay un error lo que puede evitar que incrementa un solo contador durante una sola solicitud en ciertas versiones de APC. El incremento en las solicitudes posteriores no es un problema, lo que puedo decir.