Один Memcached сервер для многих клиентов - PullRequest
1 голос
/ 05 января 2012

У нас есть 2 сервера приложений (coldfusion / Java) и один memcached.Я хочу настроить мой memcached сервер / клиент таким образом.Когда сервер 1 добавляет значение для ключа, он должен быть доступен и для сервера 2. И наоборот.

Теперь, когда я добавляю значение для ключа на сервере 1, он не доступен для чтения или редактирования на втором сервере.Как настроить

Я использую spymemcached в качестве клиентской библиотеки.

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

Ответы [ 3 ]

0 голосов
/ 05 января 2012

Похоже, это довольно молодая реализация Memcached, это может быть ошибкой.Вы можете отправить его здесь: http://code.google.com/p/spymemcached/issues/list

Если вы не думаете, что это ошибка, не могли бы вы опубликовать фрагмент кода, вызывающего вызовы в Memcached?

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

0 голосов
/ 12 апреля 2016

Все было настроено правильно, но установка комплексного значения (Структура или Массив) сделала эту пару ключ / значение недоступной для другого сервера.Теперь я сериализую все мои значения в JSON, и он работает нормально.Возможно, в Memcached версии 1.4.5 это изменилось, но для версии 1.2.6 сериализация значений - это хороший способ исправить это.

<!--- Setting up Memcached Client --->
<!--- Add code in OnApplicationStart in Application.cfc --->
<cfset AU = createObject("java", "net.spy.memcached.AddrUtil").init() />
<cfset Application.MemCacheD  = createObject("java", "net.spy.memcached.MemcachedClient").init(AU.getAddresses("127.0.0.1:11211")) />
<!--- Adding values: --->
<cfset memCacheName = "myKey" />
<cfset myValue = StructNew() />
<cfset myValue['var1'] = 'var1 value' />
<cfset Application.MemCacheD.add(memCacheName, 3600, serializeJSON(myValue)) />
<!--- Getting values: --->
<cfset memCacheName = "myKey" />
<cfset MemCachedRet = Application.MemCacheD.get(memCacheName) />
<cfif isDefined('MemCachedRet')>
    <!--- value is available from mamcached --->
<cfelse>
    <!--- get value from db and save to memcached --->
</cfif>
0 голосов
/ 05 января 2012

Либо:

A.Вы не используете один и тот же ключ для сервера 1 и сервера 2 для одного и того же объекта.

ИЛИ

B.Вы не разговариваете с одним и тем же экземпляром memcached для сервера 1 и сервера 2

ИЛИ

C.Вы дали такой короткий срок службы объекта, что он истек до того, как другой сервер сможет его использовать.

...