同时存储许多用户请求的时间戳的最佳方式

时间:2017-09-11 17:06:00

标签: php mysql performance

让我说我有一个时间戳(如:1505148597)代表tchat中发布的最后一条消息。

然后我每秒有大约10000名用户请求/lastTimestamp.php。此页面返回时间戳,以便用户知道他们是否必须获取新消息。

我应该:

a)将时间戳存储在数据库中,并在每次用户调用/lastMessageTimestamp.php返回时发出sql请求

b)将时间戳存储在服务器上的文件中,并在每次用户调用/lastMessageTimestamp.php将其打开时将其打开

c)将其存储在内存中并以某种方式访问​​它?

最优化的方法是什么?我最关心的是性能和服务器负载。

注意:我没有寻找其他方式来进行tchat,这是我想要的方式,我只想知道最佳解决方案是什么(示例非常简化) ,它甚至不是tchat。实际上我使用的是Server Sent Events,所以基本上10k用户正在打开服务器的流,而服务器正在做一个

while(1) { 
   //check the timestamp with one of the solutions
   sleep(1);
}

2 个答案:

答案 0 :(得分:0)

您应该在前面放置一个缓存层来处理负载。我建议Redis:https://redis.io/

答案 1 :(得分:0)

这是使用内存存储的最佳示例=>商店一次检索多次。您始终存储最后一个时间戳(一次)。

或者: apcu apc_store

memcached Memcached::set

Memcached设置起来有点复杂,但可以在非常高的情况下提供帮助