有没有办法检查内存缓存是否已重新启动?
Is there a way to check if memcached has been restarted?
我用C++和C#另外标记了这个问题,因为项目中的两种语言都受到影响。
情况:
- 上述语言的模块正在通过
memcached
进行通信。他们和memcached
一起运行了几个月,没有任何问题。 memcached
正在另一台服务器上运行。- 出于性能原因,
memcached
的连接始终保持打开状态,这意味着一旦每个模块启动,它就会连接到memcached
并重用此连接,直到模块停止。
现在,运行memcached
的 VM 重新启动的情况非常罕见 - 我无法控制它。 在这种情况下,我看到模块具有未定义的行为。
我的问题:
有没有办法检测memcached
实例因重新启动而无效?
在这种情况下,我会再次重新连接。
另一点是:如果这不是一个好主意,此检查是否应该与重新连接或多或少花费相同的时间,我每次需要时都会重新连接,然后在memcached
服务器重新启动时避免任何问题。
我想我找到了一个可能的解决方案 - 似乎比我想象的要容易:
引用memcached 密钥 - 例如HasMemcachedBeenRestarted
- 将在模块启动时创建。该值将设置为NO
。
这些模块作为线程运行,它们通过外部触发器唤醒。在这种情况下,他们读取此memcached密钥,当它没有值NO
时,很明显memcached
已重新启动,然后重新连接。
由于我必须为每个线程唤醒执行一次,因此它不会对性能产生任何影响。
PS:就我而言,这不是那么微不足道,因为有数百个线程,所以我必须向每个引用memcached键添加一个哈希值,以便每个线程可以检查情况。
否则,第一个线程会意识到memcached
已经重新启动,并将引用键再次设置为NO
这将导致其他线程认为一切正常的情况,即使内部连接变得无效。
相关文章:
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 重新启动后,线程无法在 while 循环中再次运行
- 在程序和基于文本的游戏和C++内重新启动程序
- 在程序/基于文本的游戏/C++内重新启动程序
- 为什么使用 exec() 重新启动程序不能正常工作?
- 即使在我关闭应用程序并重新启动它后,如何保持我的 ID 被阻止?
- 有没有办法在不重新启动或注销的情况下加载游标?
- IO服务重新启动后,Boost最后期限计时器持续触发
- 在C++中重新启动随机数序列
- 有没有办法检查内存缓存是否已重新启动?
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- 是否可以在异常(SEGFAULT)错误后自动重新启动程序
- 是否可以重新启动提升::未来
- 有没有办法以编程方式接收Windows是否正在关闭或重新启动
- 监视C++OpenFrameworks应用程序是否冻结或内存泄漏,然后强制退出并重新启动
- asio:取消后重新启动async_read_some/async_write_some是否安全
- 是否有可能从程序内部重新启动程序?
- 在Windows C++或C#中,您可以询问操作系统当前是否正在关闭/重新启动/注销
- 是否可以以编程方式从 JPEG 图像中删除重新启动标记