У меня есть старая реализация клиента memcached, основанная на клиенте danga, но слегка измененная.Я думаю, что этот клиент теперь называется Memcached-Java-Client .
Реализация, которая у меня под рукой, старая, не поддерживается и кажется фиктивной.
Мне нужночтобы перенести клиента на новый клиент со следующими ограничениями:
- Мне нужен новый алгоритм хеширования клиента, чтобы он был совместим со старым.Если это ограничение не будет выполнено, нам придется сделать сайт (по крайней мере частично) недоступным в течение нескольких часов.
- Поддержка различных методов сериализации и возможность расширения для метода сериализации.
- Улучшена производительность по сравнению с моим существующим клиентом.
- Быть совместимым с Moxi
В текущей реализации используется алгоритм согласованного хеширования, который, кажется, совместим с используемым согласованным хешированием Xmemcached , за исключением того, что я не могу получить попадание в кэш для ключей, сохраненных старым клиентом и извлеченных с помощью клиента Xmemcached.
Я отладил код и получил тот же хеш-код,но я думаю, что серверы звонят по-другому, и поэтому общий метод хэширования отличается.
Это код, который я использовал для инициализации клиента xmemcached:
final MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214"));
builder.setCommandFactory(new BinaryCommandFactory());
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
builder.setTranscoder(new WhalinTranscoder());
memcachedClient = builder.build();
Я также хочуДайте spymemcached попробовать, если я не могу заставить xmemcached работать, но я предпочитаю позже.
Редактировать: я пробовал spymemcзаболел, и не могу заставить его быть совместимым с моим текущим клиентом.Вот мой код инициализации клиента spymemcached:
final ConnectionFactoryBuilder builder = new ConnectionFactoryBuilder();
builder.setProtocol(Protocol.BINARY);
builder.setTranscoder(WhalinTranscoder());
builder.setHashAlg(HashAlgorithm.KETAMA_HASH);
builder.setLocatorType(Locator.CONSISTENT);
final MemcachedClient client = MemcachedClient(builder.build(), AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214"));