为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
哔哔one 2021-07-07 14:01:41
我用 C++ 和 C# 额外标记了这个问题,因为项目中的两种语言都受到影响。情况:上述语言的模块通过memcached. 他们正在运行 - 与 - 一起运行memcached数月没有任何问题。memcached 正在另一台服务器上运行。出于性能原因,连接memcached始终保持打开状态,这意味着一次,当每个模块启动时,它会连接memcached并重用此连接,直到模块停止。现在,memcached正在运行的虚拟机重新启动的情况非常罕见- 我无法控制它。在这种情况下,我看到模块具有未定义的行为。我的问题:有没有办法检测到memcached由于重启而无效的实例?在这种情况下,我会再次重新连接。另一点是:如果这不是一个好主意,那么此检查是否应该与重新连接的时间或多或少与重新连接相同,我每次需要时重新连接,然后在memcached服务器重新启动时避免任何问题。
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

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

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

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

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


PS:就我而言,这并不是那么简单,因为有数百个线程,所以我必须向每个引用memcached 键添加一个哈希值,以便每个线程可以检查情况。

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


查看完整回答
反对 回复 2021-07-10
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信