PHP Пользовательский вопрос суперглобального массива

StackOverflow https://stackoverflow.com/questions/7328695

  •  27-10-2019
  •  | 
  •  

Вопрос

Я читал вокруг, и я знаю, что это может быть невозможно сделать, так как я хотел бы, чтобы это было, но я надеюсь, что есть способ, так что здесь идет ..

У меня есть удостоверения личности пользователей, и у меня есть подсчет для каждого. Я хотел бы иметь возможность хранить эти значения в машинной памяти и обновлять БД только время от времени, но абсолютно не постоянно. Конечно, доступ к странице от многих пользователей, и я хочу, чтобы массив оставался актуальным для каждого пользователя и обновлялся по мере необходимости. (Это еще одна причина, по которой я не хочу использовать дБ.

массив, такой как: $ my_superglobal_arr = ('1' => 304, '2' => 763, '6' => 12, '13 '=> 96); Было бы идеально.

Какие-либо предложения ?

Спасибо !

Это было полезно?

Решение

Обновления тратят время с индексированными столбцами, верно?

Верно. Однако это зависит. Я бы настоятельно предложил вам сначала пойти на базу данных, получить практический опыт С помощью обновлений и прочего, узнайте, какое количество пользователей вы можете назвать «много». И только тогда решите, что если вам действительно нужна ваша необычная настройка, действительно ли это необходима или просто воображаемые фантазии.

Чтение других ваших вопросов я могу только сказать, что для изучения SQL сначала является обязательным.

Другие советы

Вам нужно соединить ArrayAccess с Апк способности кэширования и использовать Singleton шаблон.

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

Применение:

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

Вывод по первым запросам:

int(1)

На второй:

int(2)

Когда вам нужно сохранить эти счетчики в базе данных:

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

Примечание: Есть ошибка что может помешать вам увеличить один счетчик во время одного запроса в определенных версиях APC. Увеличение в последующих запросах не является проблемой, насколько я могу сказать.

Это не то, что PHP предлагает изначально. Лучше всего сохранить данные в хранилище ключей/значений на основе памяти. PHP изначально поддерживает мемкахед который предлагает большинство хозяев. Вы также можете взглянуть на Mongodb а также Редис

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top