2017-04-04 98 views
0

我正在写laravel应用程序,在那里我想向当前用户显示页面上的所有其他用户。我可以在Redis中存储这种类型的数据吗?

我想使用Redis的存储这类信息,因此,例如,当用户访问1页面/item/35,然后Redis的必须保存这些信息:

{'/item/35': {1: last_visit_time_in_seconds}} 

哪里last_visit_time_in_seconds是unixtimestamp。

如果两个额外的用户访问同一页面,然后Redis的将包括:

{'/item/35': {1: seconds}, {12: seconds}, {2425: seconds}} 

用户ID为1,12和2425现在正在查看此页面。如果短时间内(如30秒)没有更新{1: seconds},则必须从此项目缓存中删除此项目。前端会定期更新缓存的状态,所以这可以防止用户关闭浏览器窗口。

在Redis中可能有更好的方式来存储/获取这种信息(从item到具有上次访问时间的用户列表)。

+0

谷歌存在渠道和websockets,它会帮助我猜 –

+0

信息通过websockets无论如何交付。问题是关于如何将此信息存储在后端。 –

回答

0

您可以将item Id作为关键字,该值将是一个数组,您将推送它到任何更新(新访问)。

0

您可以使用bitmaps。这很容易,而且非常快。

您的url + timestamp将是关键,您可以将每个userId访问的位设置为1。

SETBIT '/item/35:timestamp' userId 1

然后你在这个关键的做BITCOUNT

BITCOUNT '/item/35:timestamp'

您可以联合每日或每月位计数,并获得每日超快速分析,页面上的包月用户。 Here is a nice article on this.

相关问题