如何在不重新启动整个 Web 服务器的情况下重新启动/清除内存缓存?

Rad*_*dek 51 php memcached

/opt/eduserver/eduserver 给我选择:

用法:/opt/eduserver/eduserver {start|stop|startphp|startwww|startooo|stopphp|stopwww|stopooo|restartphp|restartwww|restartooo|status|restart|reload|force-reload}

其中 memcache 是 php 模块,memcache.ini/opt/eduserver/etc/php/conf.d.

我想从命令行清除内存缓存。我可以在不“接触”网络服务器的任何其他部分的情况下以某种方式做到这一点吗?

hei*_*iko 103

是的。您可以清除内存缓存。尝试:

telnet localhost 11211
flush_all
quit
Run Code Online (Sandbox Code Playgroud)

如果 memcache 不在 localhost 11211 上运行,则必须对其进行调整。

  • @DannyArmstrong,flush 仅将项目标记为已过期。出于性能原因,Memcache 不会立即从缓存中删除过期的项目。您可以获得过期的物品,因此它们从 API 的角度来看已经消失了 (5认同)
  • 我可以以非交互方式执行此操作吗? (3认同)
  • 我正在尝试验证这实际上是否有效。到目前为止,统计数据仍然显示 total_items 3926。我期待 total_items 降为 0。这不是如何验证缓存已刷新吗? (2认同)
  • @TerryE - 你的意思是说“你不能得到过期的物品”而不是“你可以得到过期的物品”? (2认同)
  • 是的,我愿意。对不起 (2认同)

Dan*_*nie 44

这也适用于 netcat

echo "flush_all" | nc -q 2 localhost 11211 
Run Code Online (Sandbox Code Playgroud)

然后等待“确定”。

  • 没有硬编码 2 秒:`printf "flush_all\nquit\n" | nc -q -1 127.1 11211` (4认同)
  • OSX 需要 -w 超时:`echo "flush_all" | nc -w 2 本地主机 11211` (3认同)

小智 26

memcflush 在 memcache 工具中是你想要的:

memcflush --servers=localhost:11211
Run Code Online (Sandbox Code Playgroud)

更改localhost为您的服务器。

memcache 工具可能没有安装在服务器上,如果你运行的是基于 Debian 的操作系统,你可以像这样安装它:

sudo apt-get install libmemcached-tools
Run Code Online (Sandbox Code Playgroud)

  • 在 Red Hat 发行版中,该实用程序包含在 `libmemcached` 中。 (2认同)

ken*_*orb 9

在 Bash 中,您可以使用这种花哨的语法:

echo flush_all > /dev/tcp/localhost/11211
Run Code Online (Sandbox Code Playgroud)

否则使用memflush命令:

memflush --servers=localhost
Run Code Online (Sandbox Code Playgroud)