Domanda

stavo leggendo in giro, e so che potrebbe essere impossibile da realizzare come avrei voluto che sarebbe stato ma spero ci sia un modo, quindi ecco qui ..

ho ID di di utenti ed ho un conteggio per ciascuno. Mi piacerebbe essere in grado di memorizzare i valori in memoria della macchina, e aggiornare il DB solo una volta ogni tanto, ma non assolutamente costante. La pagina si accede da molti utenti, naturalmente, e voglio la matrice di rimanere rilevanti per ciascun utente, e aggiornare, se necessario. (Questa è un'altra ragione per cui non voglio usare il DB. Aggiornamenti prendere tempo con colonne indicizzate, giusto?)

un array quali: $ My_superglobal_arr = ( '1' => 304, '2' => 763, '6' => 12, '13' => 96); sarebbe stato perfetto.

Qualche suggerimento?

Grazie!

È stato utile?

Soluzione

Aggiornamenti prendere tempo con colonne indicizzate, giusto?

destro. Tuttavia, dipende. Mi piacerebbe fortemente suggerisco di andare per il database prima, ottiene esperienza pratica con gli aggiornamenti e roba, imparare che cosa determinata quantità di utenti che è possibile chiamare "molti". E solo allora decidere, se si ha realmente bisogno la configurazione insolita, è fantasie davvero necessario o solo immaginari.

Leggendo le vostre altre domande posso solo dire che per imparare SQL prima è un must.

Altri suggerimenti

È necessario paio ArrayAccess con APC capacità di caching e impiegano un Singleton modello.

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() {}
}

Utilizzo:

$user_counter = UserCounter::getInstance();
$user_counter[1] = $user_counter[1] + 1;
var_dump($user_counter[1]);

Output alla prima richiesta:

int(1)

Sul secondo:

int(2)

Quando è necessario salvare questi contatori in un database:

$user_counter = UserCounter::getInstance();
foreach ($users as $user_id) {
   store_counter_in_db($user_id, $user_counter[$user_id]);
}

Nota: c'è un bug che può impedire di incremento un unico contatore durante singola richiesta in alcune versioni di APC. Incremento in richieste successive non è un problema, per quanto un posso dire.

Questo non è qualcosa offerte PHP nativo. Non Sei soluzione migliore è quella di memorizzare i dati in un negozio chiave / valore base della memoria. PHP supporta nativamente memcached che la maggior parte dei padroni di casa offrono. Si può anche dare un'occhiata a MongoDB e Redis

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top