何时在非阻塞模式下使用libmemcached?

时间:2013-03-19 11:57:45

标签: memcached libmemcached

我开始将libmemcached集成到我的应用程序中并阅读文档,有一个非阻塞模式标志。快速谷歌之后,非阻塞模式似乎有性能优势,但在非阻塞模式下运行libmemcached是否有任何缺点?

1 个答案:

答案 0 :(得分:0)

当然有。只有当您需要确保写入的值实际写入memcached并且没有失败时,才会出现这种缺点。例如 - 您正在使用memcached存储一个计数器变量,该变量具有一个标记,用于在执行操作之前检查计数器是否已达到某个值。

在阻塞模式下 - memcached客户端将等待在继续之前从memcached获取写入成功响应,并在失败时产生错误。这样你知道计数器已更新。如果您告诉它以非阻塞模式写入,则客户端发送请求以递增计数器,但从不等待确保它确实发生。因为它不会等待,所以你可以在呼叫恢复后更快地进行代码执行,但是由于不确定无法确定计数器是否会增加。

但是,由于memcached值在服务重启时被破坏(想想系统崩溃),你无法确定某个值是否存在。此外,对于低内存修剪,您也无法确定该值是否100%正确,因为它可能会被LRU算法修剪 - 您需要持久存储来缓解这种不确定性。

鉴于这种固有的不确定性,许多人使用非阻塞模式来获得性能提升,因为他们无法完全确定memcached中的计数器值无论如何都不会被重置/保留,所以为什么不能获得一些性能呢?交易。

希望这可以澄清这个问题。作为旁注 - MongoDB在持久存储中具有非阻塞写入 - 虽然它的灵活性令人敬畏,但是使用非阻塞模式的人更多的是一种错误的安全感,写入总是会成功...

[R