У нас был похожий сценарий с клиентом Redis, и изначально Нашим решением было создать единый общий экземпляр, к которому мы синхронизировали доступ через lock
.Это было хорошо, но чтобы избежать задержек и блокировок, мы в конечном итоге написали поточно-ориентированный конвейерный клиент, который позволяет одновременное использование без какой-либо блокировки.Я не знаю так много о протоколе болей мужчин, но мне интересно, может ли что-то подобное здесь применяться.Я действительно испытываю искушение попытаться выяснить, могу ли я добавить это в BookSleeve (наш пользовательский клиент OSS Redis), если вы можете немного подождать.
Но мы были в целом в состояниипродолжайте использовать только синхронизированный общий экземпляр (почти то же самое, что и синглтон, в зависимости от вашей чистоты).
Взглянув на FAQ , конвейер действительно являетсявозможность;и я полностью открыт для возможности написания асинхронного / конвейерного клиента memcached внутри booksleeve .Большая часть необработанного ввода-вывода / мультиплексирования была бы довольно распространена в Redis.Другие приемы, которые вы можете рассмотреть, - это использование get_multi и т. Д., А не раздельное получение, где это возможно - я не знаю, поддерживает ли ваш текущий клиент это, хотя (IK не смотрел).
Но: я не делаюзнаю, как он противопоставляет memcached и redis, но в нашем случае , переключение на конвейерный / мультиплексированный API означало, что нам не нужно для использования большого количества пулов (много соединений) - одно соединение(должным образом конвейерный) способен поддерживать много одновременного использования с одного узла.