【问题标题】:Can I store in Redis this type of data?我可以在 Redis 中存储这种类型的数据吗?
【发布时间】:2017-08-29 05:18:28
【问题描述】:

我正在编写 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}}

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

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

【问题讨论】:

  • google 存在渠道和 websockets,我猜它会有所帮助
  • 无论如何,信息都是通过 websockets 传递的。 Questiong 是关于如何在后端存储这些信息。

标签: laravel redis


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    您的url + timestamp 将是密钥,并且您将为每个访问的用户ID 设置该位为1。

    SETBIT '/item/35:timestamp' userId 1

    然后你在这个键上做一个BITCOUNT

    BITCOUNT '/item/35:timestamp'

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2021-09-03
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2019-06-24
      相关资源
      最近更新 更多