我目前正在一个每周重启一次的系统上测试 memcached,因此想在重启后预热 memcached。
想知道是否有人拥有一个适用于此目的的示例脚本?
答案1
这取决于您的应用程序。memcached 只是一种以非持久性方式存储某些键值的方法,因此没有真正的方法来构建标准化脚本。它也没有办法浏览当前内容,因此没有真正的方法在重启之前保存内容。
如果您正在使用某种内部跟踪流行度的应用程序框架,它可能具有某些功能来执行此操作(这不太可能)。实际启动 memcached 的最佳方法是使用自定义脚本获取适当的内容并将其推送到存储中。但是,如果您使用过期时间,则不随机启动此启动可能会在内容同时过期时产生问题。或者,假设是一个 Web 应用程序,设置某种松散的爬虫进行 2-3 个链接深度爬取可能会有效。不尝试启动缓存并专注于使非缓存请求合理快速地响应可能比上述任何一种方法更能利用资源。
真正的解决方案是不要每周重启服务器。正常运行的系统不需要定期重启(只有非常低级别的系统补丁才需要重启)。
答案2
也许可以考虑迁移到像 Redis 这样的持久化到磁盘的缓存解决方案(http://code.google.com/p/redis/)
答案3
如果有人对此仍然感兴趣,memcached 现在支持它 https://github.com/memcached/memcached/wiki/ReleaseNotes1518
答案4
运行网络爬虫可能会有帮助,尽管它不提供设置适当到期日期的选项。
作为一般背景信息,这里有一个关于可编写脚本的选项的有用概述 > http://docs.oracle.com/cd/E17952_01/refman-5.1-en/ha-overview.html
要查看 memcached 中的项目(不包括 Peep,这是一个 Ruby 脚本,似乎不再维护,我无法在 Fedora 12 上运行它),需要在系统上安装 netcat,并且以下示例假设 memcached 在端口 11211 上运行 >
echo “统计项目” | nc localhost 11211
这将列出下一条指令所需的 slab 编号。假设 slab 编号为 17,则显示该 slab 中的所有项目
echo “stats cachedump 17 0” | nc localhost 11211
虽然不建议在频繁使用的生产系统上执行此操作!