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 !

¿Fue útil?

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.

Esto no es algo que PHP ofrece de forma nativa. Su mejor opción es almacenar los datos en un almacén de clave/valor basado en memoria. PHP admite nativamente memcached que ofrecen la mayoría de los anfitriones. También puedes echar un vistazo a Mongodb y Rehacer

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