Javascript实时访客信息
需要一些我目前正在使用的实现反馈 我创建了一个javascript文件,该文件嵌入到我的网站中,每3秒向端点发送一个请求。此请求具有为每个新访问者创建的唯一标识符。然后使用一些键(比如site_123_unique_标识符)将其添加到redis中,该标识符带有json编码的值{“load_time”:189225}。密钥的过期时间为5秒,因为我为每个访问者使用一个唯一的标识符,所以它不会复制访问者,只会增加过期时间 对于我们的实时仪表板,我们每隔几秒钟就向后端发送一次请求,它会访问所有与站点_123*匹配的密钥。然后,我循环遍历它返回的所有redis键,并对其运行json_解码,然后将值相加Javascript实时访客信息,javascript,php,redis,real-time,Javascript,Php,Redis,Real Time,需要一些我目前正在使用的实现反馈 我创建了一个javascript文件,该文件嵌入到我的网站中,每3秒向端点发送一个请求。此请求具有为每个新访问者创建的唯一标识符。然后使用一些键(比如site_123_unique_标识符)将其添加到redis中,该标识符带有json编码的值{“load_time”:189225}。密钥的过期时间为5秒,因为我为每个访问者使用一个唯一的标识符,所以它不会复制访问者,只会增加过期时间 对于我们的实时仪表板,我们每隔几秒钟就向后端发送一次请求,它会访问所有与站点_1
这是否适用于每天浏览量超过数百万的网站?如果不是您推荐的解决方案,则必须使用ie7+[xmlhttp而不是sockets]这在唯一访问者较少时有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询
您是否在计算每个访问者的联机时间?当唯一访问者较少时,此功能有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询
您是否在计算每个访问者的联机时间?当唯一访问者较少时,此功能有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询
您是否在计算每个访问者的联机时间?当唯一访问者较少时,此功能有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询
您是否在计算每个访问者的在线时间?模式
每个访问者的散列,包含“loadt”、“onlinet”、“loc”、“avgSpeed”等字段散列站点:[siteId]:[visitorId]
一个全局ZSET,其中ZSET-site:visitors
为成员,siteId:visitorsId
为值,用于手动密钥过期lastSeen\u-timestamp
一组所有的SET site:[siteId]
出现在visitorId
siteId
(可选)一组所有SET site
siteId
- 它工作,一切都生活在Redis中
- 多亏了
您可以为每个访问者存储/增加任意数量的属性散列站点:[siteId]:[visitorId]
- 你将不得不设法让自己破产。cron(例如每~5秒)必须使用:
ZRANGE site:visitors(NOW()-5秒)-1检索过期的
visitorId
DEL site:(member_value)
然后从第一个成员中提取siteId并执行(visitorId
每次都从该成员中提取)
(请参阅下面我关于LUA脚本的说明)
- 每次更新
中的值时,您将散列站点:[siteId]:[visitorId]
ZADD site:visitors [siteId:visitorId] now()
SADD site:[siteId] [visitorId]
。。。与HSET
或HINCRBY站点:[siteId]:[visitorId]字段值一起使用
- 您不需要
。例如,如果您想要检索特定网站上当前访问者的数量 只需执行:json\u解码
SCARD站点:[siteId]
- 如果需要检索当前连接到
的所有访问者的平均加载时间,最好的方法是使用LUA脚本首先使用siteId
检索访问者ID,然后循环访问SMEMBER site:[siteId]
并将数据与visitorId
,除以HGET site:[siteId]:[visitorId]loadt
就完成了:)len(visitorIds)
- 您应该在lua中实现上述算法,以便在Redis中完成所有这些工作,只接收您需要的内容,请参见
每个访问者的散列,包含“loadt”、“onlinet”、“loc”、“avgSpeed”等字段散列站点:[siteId]:[visitorId]
一个全局ZSET,其中ZSET-site:visitors
为成员,siteId:visitorsId
为值,用于手动密钥过期lastSeen\u-timestamp
一组所有的SET site:[siteId]
出现在visitorId
siteId
(可选)一组所有SET site
siteId
- 它工作,一切都生活在Redis中
- 多亏了
您可以为每个访问者存储/增加任意数量的属性散列站点:[siteId]:[visitorId]
- 你将不得不设法让自己破产。cron(例如每~5秒)必须使用:
ZRANGE site:visitors(NOW()-5秒)-1检索过期的
visitorId
DEL site:(member_value)
然后从第一个成员中提取siteId并执行(visitorId
每次都从该成员中提取)
<