【问题标题】:Javascript realtime visitor informationJavascript 实时访客信息
【发布时间】:2013-11-09 11:03:09
【问题描述】:

需要一些关于我目前正在使用的实现的反馈...

我创建了一个嵌入到我的网站中的 javascript 文件,该文件每 3 秒向端点发送一次请求。此请求具有为每个新访问者创建的唯一标识符。然后使用一些键(如 site_123_unique_identifier 和 json 编码值 {"load_time":189225})将其添加到 redis。密钥有 5 秒的过期时间,由于我为每个访问者使用唯一标识符,因此不会重复访问者,只会增加过期时间。

对于我们的实时仪表板,我们每隔几秒向后端发送一次请求,它会获取与 site_123* 匹配的所有键。然后,我遍历它返回的所有 redis 键,并在其上运行 json_decode 并将值相加。

这是否适用于每天获得数百万浏览量的网站?如果不是您推荐的解决方案,则必须使用 ie7+[xmlhttp 而不是套接字]

【问题讨论】:

  • 这行不通。 Redis 是关于即时聚合数据,而不是累积数据以离线处理它们。

标签: javascript php redis real-time


【解决方案1】:

架构

  • HASH site:[siteId]:[visitorId] 为每个访问者创建一个哈希值,其中包含“loadt”、“onlinet”、“loc”、“avgSpeed”等字段...

  • ZSET site:visitors 一个全局 zset,siteId:visitorsId 作为成员,lastSeen_timestamp 作为值,用于手动密钥过期。

  • SET site:[siteId] 一组所有visitorId 呈现在siteId

  • SET site(可选)一组所有siteId

优点

  • 它工作正常,一切都在 Redis 中
  • 感谢HASH site:[siteId]:[visitorId],您可以为每个访问者存储/增加任意数量的属性

缺点

  • 您必须自己管理到期。一个 cron(例如,每个约 5 秒)将必须检索即将到期的 visitorId,其中:ZRANGE site:visitors (NOW()-5 seconds) -1

然后遍历所有成员并执行:

DEL site:(member_value)

然后从第一个成员中提取siteId并执行(visitorId是每次从成员中提取)

SREM site:[siteId] visitorId1 visitorId2 visitorId3

(请参阅下面关于 LUA 脚本的说明)

  • 每次更新HASH site:[siteId]:[visitorId] 中的值时,您将拥有

执行:

ZADD site:visitors [siteId:visitorId] now()
SADD site:[siteId] [visitorId]

...连同HSETHINCRBY site:[siteId]:[visitorId] field value

  • 你不需要json_decode。例如,如果您想检索特定网站上当前访问者的数量 只需执行: SCARD site:[siteId]

  • 如果您需要检索当前连接到siteId的所有访问者的平均加载时间,最好的方法是使用LUA脚本首先检索带有@987654344的visitorId @ 然后循环 visitorId 并将数据与 HGET site:[siteId]:[visitorId] loadt 相加,除以 len(visitorIds) 就完成了:)

注意

  • 您应该在 lua 中实现上述算法,以便在 Redis 中完成所有这些工作,只接收您需要的内容,请参阅 EVAL

【讨论】:

  • 谢谢你,起初我不太明白,但这不是谷歌的;D
【解决方案2】:

这在唯一访问者较少的情况下有效,访问者数量变大,您将在 Redis 中获得许多密钥,并且当您在 Redis 上执行密钥 site_123* 时,Redis 服务器将阻塞,直到命令完成,在此期间块,Redis 服务器不会处理任何其他查询。

您是否在计算每个访问者的在线时间?

【讨论】:

  • 很快我们将添加诸如在线时间、位置、平均加载速度、他们在哪个页面上等信息
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 2016-03-19
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2013-03-18
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多