gpt4 book ai didi

c# - 有没有办法检查 memcached 是否已重新启动?

转载 作者:行者123 更新时间:2023-11-30 05:00:47 25 4
gpt4 key购买 nike

我额外用 C++ 和 C# 标记了这个问题,因为项目中的两种语言都受到影响。

情况:

  1. 上述语言的模块通过 memcached 进行通信。它们与 memcached 一起运行了几个月,没有任何问题。
  2. memcached 正在另一台服务器上运行。
  3. 出于性能原因,与 memcached 的连接始终打开,这意味着一旦每个模块启动,它就会连接到 memcached 并且重复使用此连接,直到模块停止。

现在,运行 memcached 的 VM 重启的情况非常罕见 - 我无法控制它。在这种情况下,我看到模块具有未定义的行为。

我的问题:
有没有一种方法可以检测到 memcached 的实例由于重启而变得无效?
在这种情况下,我会再次重新连接。

另一点是:这个检查是否应该与重新连接花费更多或更少的时间,如果这不是一个好主意,我会在每次需要时重新连接并且然后我在 memcached 服务器重启时避免了任何问题。

最佳答案

我想我找到了一个可能的解决方案——它似乎比我想象的要容易:

reference memcached 键 - 例如 HasMemcachedBeenRestarted - 将在模块启动时创建。该值将设置为 NO

模块作为线程运行,它们由外部触发器唤醒。在这种情况下,他们会读取这个 memcached key ,当它没有值 NO 时,很明显 memcached 已重新启动,然后他们会重新连接。

由于我必须为每个线程唤醒 执行一次它不会对性能产生任何影响。


PS:在我的例子中,这并不是那么微不足道,因为有数百个线程,所以我必须向每个 reference memcached 键添加一个散列,以便每个线程都可以检查情况。

否则,第一个线程会意识到 memcached 已重新启动,并会再次将 reference 键设置为 NO,这将导致这种情况即使内部连接无效,其他线程也会认为一切正常。

关于c# - 有没有办法检查 memcached 是否已重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com