我正在寻找更好的解决方案。
我有一个拥有 200.000 多个用户和大量 SQL 查询的社区。它们中的大多数在其结果中都包含一个用户 ID。在大多数情况下,我需要在输出中使用相关的用户名来解决。
[userId - username] 是一个单独的表。为了避免对这个表进行大量的连接,我决定将洞表作为一个数组缓存在 memcacheD 中。这在开始时工作得很好。SQL 服务器负载下降了很多。一切都比以前运行得更快。
但是,几周后,hole server-cluster (5 webserver) 出现了问题。缓存的用户 ID 用户名数据集变得巨大。以至于我在网络接口达到了内部 1000Mbit 数据限制,而 memcacheD 正在将记录发送到请求服务器。我试图序列化数据,但它并没有改变战利品。
我现在看到三种方法:
1) 强制 memcacheD 缓存每台服务器上的记录。所以集群不需要向其他服务器请求缓存。但是数据集的每一次更改都需要在每台服务器上同时完成。- 无论如何,我不知道这是否可能。
2) 切换回 JOINS 并使用 cacheexecute。
3)你有一个更好的解决方案!:)