Сведения о вопросе

GANGST1ER

12:05, 2nd August, 2020

Теги

PHP   Memcached    

Как работает memcache?

Просмотров: 413   Ответов: 6

Здравствуйте…

В стадии разработки проекта столкнулся с вопросом:

Нормально ли в 1 ключ пихать примерно 6 мб текста (объект ютуб класса) т.е. кешировать 6 мб текста в 1 ключе? Таких ключей по 6 мб может быть десятки тысяч.

И еще вопрос: мемкеш хранит данные на HDD или же в оперативной памяти?

Если в оперативной, то максимум я могу записать 64 метра (если предел стоит 64)?


Вчера на локалхосте проверял стату в мемкеше…
Number of bytes this server is allowed to use for storage установлено 64 Mega Bytes

А
Total number of bytes read by this server from network уже 69.00498104098 Mega Bytes

при этом
Number of valid items removed from cache to free memory for new items равен нулю…


Но почему тогда никакой перезаписи не произошло?



  Сведения об ответе

dump

20:52, 11th August, 2020

code.google.com/p/memcached/wiki/FAQ#Why_are_items_limited_to_1_megabyte_in_size?

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

Вообще memcached это механизм разработанный для кеширования веб-страниц, на которых редко бывает нужным хранить данные более 1 мегабайта длиной. Возможно, вам стоит поискать другое решение для кеширования данных, или придумать другой способ хранить ютуб-объекты в текстовом виде.


  Сведения об ответе

dump

10:33, 21st August, 2020

memcached — простая штука: это словарь (примерно как array в php или dict в python) ограниченного объема, висящий в памяти отдельным процессом с несложным протоколом доступа, который могут использовать другие процессы.

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

Думайте об этом примерно как $a['vasia'] = 'petya', но как будто данные в переменной $a сохраняются между вызовами, доступны не только конкретному скрипту + сохранность этих данные не гарантирована.

По поводу ограничений на размер значений стоит почитать тут.

Вы на данном этапе хотите записывать десятки тысяч больших объектов (кстати, не понял, каких объектов — то это 6М текста, то что-то про youtube) в оперативную память, чтобы обеспечивать быстрый доступ к ним. Не знаю, та ли это задача, которую хотите решить. Тут потребуется перекомпиляция memcached и большое количество оперативной памяти.


  Сведения об ответе

FAriza

00:09, 4th August, 2020

Если я правильно понял вашу задачу, то инструмент вы выбрали явно неверный. Мемкеш не предназначен для таких обьемов данных 6мбх10000видео — 60гиг оперативы:) Я бы сами видео хранил в nosql базе, а топ500-1000 например закешировал в мемкеш.

>>Вчера на локалхосте проверял стату в мемкеше…
>>Number of bytes this server is allowed to use for storage установлено 64 Mega Bytes
>>А
>>Total number of bytes read by this server from network уже 69.00498104098 Mega Bytes
>>при этом
>>Number of valid items removed from cache to free memory for new items равен нулю…

Последний параметр это количество обьектов у которых время жизни еще не прошло, но их пришлось вытеснить из-за заполнения доступного лимита озу. А обьекты которые умерли «от старости» сюда не считаются — такчто ничего удивительного что инфы отдано больше чем есть в памяти — просто некоторая инфа успела сменится.

Ну и про сам мемкеш — вы сами можете выставить его обьем и время жизни обьектов


  Сведения об ответе

repe

14:43, 14th August, 2020

memcache хранит данные полностью в оперативной памяти и, если мне память не изменяет, ему пофигу на размер данных под ключом. А по поводу количества прочитанных данных из сети — дак фиг знает, что он там читал… Надо смотреть сколько конкретно данных в нем крутится.


  Сведения об ответе

nYU

07:19, 11th August, 2020

полагаю, что Total number of bytes read by this server from network учитывает общую длину пакетов. т.е. «SET keyname_312 vaaaalllluuuueeeeee», и может быть даже в этот показатель включается общий размер всех полученных пакетов с GET-командами.
отсюда и расхождение.


  Сведения об ответе

ЯЯ__4

10:40, 8th August, 2020

про Memcache рекомендую статью к прочтению www.opennet.ru/base/dev/memcached_tips.txt.html
многое должно прояснится. А вообще если сомнения «сломается — не сломается если на сайт придёт 100000 пользователей» попробуйте использовать прототипирование и тестирование.

Посмотреть что творится в memcache можно через telnet интерфейс
lzone.de/articles/memcached.htm


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться