Mr *_*ubs 6 .net performance memcached scalability enyim
我正在寻找有关处理打开memcached连接的有效解决方案的建议,给出FAQ引用:
记住,没有什么能阻止你多次意外连接.如果将memcached客户端对象实例化为您尝试存储的对象的一部分,那么当一个请求中的1,000个对象创建1,000个并行连接时,请不要感到惊讶.在跳到列表之前仔细查看这样的错误.
另请参阅:初始化Memcached客户端和管理连接对象.
我考虑在缓存程序集中使用单例来提供memcached客户端,但我确信必须有更好的方法,因为锁会引入(不需要的?)开销.
我很清楚客户端的使用模式,我不清楚的是如何在可扩展性和性能方面有效地使用客户端.其他人如何处理使用memcached客户端?
这里有50美元的赏金给你.
我们的 Redis 客户端也有类似的场景,最初我们的解决方案是拥有一个通用的单个实例,我们通过lock
. 这很好,但为了避免延迟和阻塞,我们最终编写了一个线程安全的管道客户端,它允许并发使用而没有任何阻塞。我对男人痛苦的协议不太了解,但我想知道类似的东西是否适用于此。如果您可以稍等一下,我实际上很想尝试调查一下是否可以将其添加到 BookSleeve(我们的自定义 OSS redis 客户端)中。
但我们通常能够仅使用同步共享实例(与单例几乎相同,具体取决于您的纯粹主义程度)。
看了一眼FAQ,pipeline确实是有可能的;我完全愿意选择在booksleeve中编写异步/管道化 memcached 客户端。大多数原始 IO/多路复用在 Redis 中非常常见。您可以考虑的其他技巧是使用 get_multi 等,而不是尽可能单独获取 - 不过,我不知道您当前的客户端是否支持此操作(IK 还没有看过)。
但是:我不知道它如何将 memcached 与 redis 进行对比,但在我们的例子中,切换到管道/多路复用 API 意味着我们不需要使用太多池化(许多连接)——单个连接(正确管道化)就可以支持单个节点的大量并发使用。