Можно ли сохранить Массив PHP в Кэш-памяти?

Можно уменьшить издержки на вызов путем сохранения дополнительных данных, вместо того, чтобы восстановить его каждый раз:

public class RightPadder {

    private int length;
    private String padding;

    public RightPadder(int length, String pad) {
        this.length = length;
        StringBuilder sb = new StringBuilder(pad);
        while (sb.length() < length) {
            sb.append(sb);
        }
        padding = sb.toString();
   }

    public String pad(String s) {
        return (s.length() < length ? s + padding : s).substring(0, length);
    }

}

Как альтернатива, можно сделать длину результата параметром к pad(...) метод. В этом случае сделайте корректировку скрытого дополнения в том методе вместо в конструкторе.

(Подсказка: Для дополнительного кредита сделайте его ориентированным на многопотоковое исполнение!;-)

18
задан JasonDavis 15 June 2012 в 00:07
поделиться

3 ответа

Да.

Memcache::set('someKey', array(
    'user_id' => 1,
    'url' => 'http://',
    'name' => 'Dave'
));

] Подробные примеры см. В документации .

23
ответ дан 30 November 2019 в 07:39
поделиться

В memcached можно хранить почти все, что угодно.

См. Документацию memcache :: set , в которой говорится:

bool Memcache::set(string $key, mixed $var [, int $flag [, int $expire ]] )

var

 Переменная хранить. Строки и целые числа хранятся как есть, другие типы

сохраняются сериализованными.

Итак, да, вы можете сохранить массив или даже объект, если необходимо: -)


Кстати, то же самое с Memcache :: add и Memcache :: replace

1
ответ дан 30 November 2019 в 07:39
поделиться

максимальный размер хранения элемента в кэше памяти составляет 1 048 576 байт (1 МБ), сериализация массива занимает немного места.

если бы вы структурировали свой массив так, как:

array(
    [0] => 1,
    [1] => 2,
    [2] => 3
)

ключ создается автоматически, а значение является идентификатором пользователя.

сериализуется массив из 5000 пользователей, пронумерованных 1-5000 с использованием этой структуры, имеет длину строки 67792 символа, 50000 пользователей создают массив из 777794 символа.

нумерация от 100000 до 150000 дает сериализованную строку из 838917 символов.

так что при 50 тыс. пользователей (как указано в вашем предыдущем вопросе), вы, вероятно, будете меньше лимита в 1 МБ. если у вас есть локальный кеш (APC и т. д.), используйте его вместо этого, или если по какой-либо причине НЕ нужны все идентификаторы сразу, Я настоятельно рекомендую разделить результаты или просто использовать БД.

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

8
ответ дан 30 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: