2013-07-16 2 views
0

Привет, я новичок в Memcache.I имеет 5 серверов Memcache (версия 1.22), и я использую библиотеку memcache Python. Когда я использую один сервер, все работает нормально, но когда я использую memc.set_servers (memcL) для настроить 5 серверов, некоторые ключи получают кеширование, а другие нет. В чем причина этого странного поведения?Python Memcache

фрагмент кода:

 itemsForCache=queries[1].execute(settings.getDBCursor_1(),queries[1].getQuery(settings.getParameters()))  
    cacheDataEntry="" 
    for CacheItems in itemsForCache: 
     cacheDataEntry+=str(CacheItems[0])+" " 

    cache_time = time.time() - start_time 
    cachingTime+=cache_time; 
    li.info(recommendation.getIdRec()+str(iterator[0])+"_"+pKey+" | "+cacheDataEntry+" | "+str(cache_time)) 
    settings.getMemCacheClient().set(recommendation.getIdRec()+str(iterator[0])+"_"+pKey,cacheDataEntry,int(settings.getConfigurationValue("memcache-data-life-time"))) 

Спасибо за вашу помощь.

ответ

0

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

Итак, как достигается распределение данных? Это клиентская библиотека делает это. Библиотека memcached client (т. Е. Используемая вами библиотека memcache python) - это та, которая фактически распространяет данные среди всех серверов, для которых вы ее настроили. Его алгоритм распределения данных таков, что данный ключ всегда будет переходить на тот же сервер memcached.

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

nc 192.168.1.18 11211 

где 192.168.1.18 - сервер memcached.

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

+0

Благодарим за помощь. Наконец, проблема заключалась в том, что я устанавливал время истечения срока действия кэшированного ключа более 30 дней, а Memcache не поддерживает время истечения более 30 дней. Это обстоятельство вызывало странное поведение Memcache. – amartin

0

И наконец, я решил проблему, установив время истечения ключа на 0 (без истечения срока действия). Memcache имеет странное поведение при установке вышеупомянутого параметра на значение больше 2592000 (30 дней).

От http://php.net/manual/en/memcache.set.php:.

«Время Истечение пункта Если он равен нулю, то элемент никогда не будет истекать Вы также можете использовать Unix метку времени или количество секунд, начиная с текущего времени, но в последнем. в случае, если количество секунд не может превышать 2592000 (30 дней) ».

Благодарим за помощь.

Смежные вопросы