【问题标题】:News feed using redis使用 redis 的新闻提要
【发布时间】:2016-02-18 08:05:50
【问题描述】:

我有以下表结构,我在其中存储用户的活动,例如“产品创建”

标识 用户身份 type_id 类型 动词 数据 created_at 更新时间

每当产品发生事件时(产品已收到订单),我需要更新更新时间,以便记录出现在第一个,因为用户将看到“使用 updated_at 排序”行数据。我在这里提到的提要将由单个用户使用,这里没有跟随的概念。因此,创建提要的人将看到他自己的提要。如果提要上有更新(某人对该产品下的订单),它应该会上升。

所以当下单时,我会更新条目的更新时间,使其出现在第一位。

我打算使用 redis 进行读取,但我对更新部分感到很困惑。我将如何处理这种情况。

我尝试了什么?

创建如下表结构

  1. 身份证
  2. user_id - 创建事件的用户
  3. 事件 - created_product
  4. event_id - products 表的 product_id
  5. data - 商品详情的json对象
  6. created_at
  7. updated_at

收到订单时

updated_at 时间戳已更新。这样记录就会出现在用户提要的顶部。

但这似乎不是一个合适的解决方案,因为频繁更新可能会导致行锁定和更多等待。我该如何解决?

【问题讨论】:

    标签: php mysql redis feed


    【解决方案1】:

    嗯,你可以在 redis 中创建排序集:

    FEED:USER_ID 包含值:

    PRODUCT_ID - 作为分数的最后更新时间

    然后通过你从 redis 获得的 id 从数据库中获取产品。

    但是,如果您主要关心的是行锁定,那么也许您应该只排队更新?创建 redis 排序集“PRODUCT_UPDATED”并在更新产品时添加行:

    USER_ID#PRODUCT_ID - 以分数更新时间

    然后创建一些后台 CRON 作业,它将更新在该排序集中找到的产品。您可以每秒或每 30 秒执行一次,您可以限制更新次数等...

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      相关资源
      最近更新 更多