Задать вопрос

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

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

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

Нормально ли в 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 равен нулю…


Но почему тогда никакой перезаписи не произошло?
  • Вопрос задан
  • 13471 просмотр
Подписаться 4 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 6
code.google.com/p/memcached/wiki/FAQ#Why_are_items_limited_to_1_megabyte_in_size?

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

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

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

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

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

Вы на данном этапе хотите записывать десятки тысяч больших объектов (кстати, не понял, каких объектов — то это 6М текста, то что-то про youtube) в оперативную память, чтобы обеспечивать быстрый доступ к ним. Не знаю, та ли это задача, которую хотите решить. Тут потребуется перекомпиляция memcached и большое количество оперативной памяти.
Ответ написан
Комментировать
FeNUMe
@FeNUMe
Если я правильно понял вашу задачу, то инструмент вы выбрали явно неверный. Мемкеш не предназначен для таких обьемов данных 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 равен нулю…

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

Ну и про сам мемкеш — вы сами можете выставить его обьем и время жизни обьектов
Ответ написан
Комментировать
clamaw
@clamaw
memcache хранит данные полностью в оперативной памяти и, если мне память не изменяет, ему пофигу на размер данных под ключом. А по поводу количества прочитанных данных из сети — дак фиг знает, что он там читал… Надо смотреть сколько конкретно данных в нем крутится.
Ответ написан
Комментировать
CKOPOBAPKuH
@CKOPOBAPKuH
полагаю, что Total number of bytes read by this server from network учитывает общую длину пакетов. т.е. «SET keyname_312 vaaaalllluuuueeeeee», и может быть даже в этот показатель включается общий размер всех полученных пакетов с GET-командами.
отсюда и расхождение.
Ответ написан
Комментировать
@niko83
про Memcache рекомендую статью к прочтению www.opennet.ru/base/dev/memcached_tips.txt.html
многое должно прояснится. А вообще если сомнения «сломается — не сломается если на сайт придёт 100000 пользователей» попробуйте использовать прототипирование и тестирование.

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

Войдите, чтобы написать ответ

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