Frage

Ich habe herumgelesen und weiß, dass es möglicherweise unmöglich sein könnte, so zu erreichen, wie ich es mir wünschte, aber ich hoffe, dass es einen Weg gibt, also geht es hier.

Ich habe IDs von Benutzern und zähle für jeden. Ich möchte in der Lage sein, diese Werte im Maschinenspeicher zu speichern und die DB nur hin und wieder zu aktualisieren, aber Absolutley nicht ständig. Auf die Seite wird natürlich von vielen Benutzern zugegriffen, und ich möchte, dass das Array für jeden Benutzer relevant bleibt und nach Bedarf aktualisiert wird. (Das ist ein weiterer Grund, warum ich die DB -Updates nicht mit indizierten Spalten verwenden möchte, oder?)

ein Array wie: $ my_superglobal_arr = ('1' => 304, '2' => 763, '6' => 12, '13 '=> 96); wäre perfekt gewesen.

Irgendwelche Vorschläge ?

Vielen Dank !

War es hilfreich?

Lösung

Updates Nehmen Sie sich Zeit mit indizierten Spalten, oder?

Recht. Es kommt jedoch darauf an. Ich würde Ihnen nachdrücklich vorschlagen, zuerst für die Datenbank zu gehen, erhalten praktische Erfahrung Erfahren Sie mit Updates und Dingen, welche Anzahl von Benutzern Sie "viele" nennen können. Und erst dann entscheiden Sie, ob Sie Ihr ungewöhnliches Setup wirklich benötigen, ist es wirklich notwendig oder nur imaginäre Fantasien.

Wenn Sie Ihre anderen Fragen lesen, kann ich nur sagen, dass es ein Muss ist, SQL zu lernen.

Andere Tipps

Sie müssen Paar ArrayAccess mit APC zwischen den Fähigkeiten zwischengespeichert und einsetzt Singleton Muster.

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

Verwendungszweck:

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

Ausgabe auf die erste Anfrage:

int(1)

Auf dem zweiten:

int(2)

Wenn Sie diese Zähler in einer Datenbank speichern müssen:

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

Notiz: Es gibt einen Fehler Dies kann Sie daran hindern, einen einzelnen Zähler während einer einzelnen Anforderung in bestimmten Versionen von APC zu erhöhen. Das Inkrementieren in nachfolgenden Anfragen ist kein Problem, soweit ich sagen kann.

Dies ist nichts, was PHP nativ bietet. Am besten speichern Sie die Daten in einem Speicher -basierten Schlüssel-/Wertspeicher. PHP unterstützt nativ memcached welche die meisten Gastgeber bieten. Sie können sich auch ansehen MongoDb und Redis

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top