我可以在Redis中存储此类数据吗?

时间:2017-04-04 06:32:41

标签: laravel redis

我正在编写laravel应用程序,我想在页面上显示当前用户所有其他用户。

我想使用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}}

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

可能有更好的方法在Redis中存储/获取此类信息(从item映射到上次访问时间的用户列表。)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用bitmaps。这很容易也很快。

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

SETBIT '/item/35:timestamp' userId 1

然后你在这个密钥上做BITCOUNT

BITCOUNT '/item/35:timestamp'

您可以合并每日或每月的位数,并在页面上的每日,每月访问者上获得超快速分析。 Here is a nice article on this.