使用redis

时间:2016-02-18 08:05:50

标签: php mysql redis feed

我有以下表格结构,用于存储用户的活动,例如'产品创建'

ID 用户身份 TYPE_ID 类型 动词 数据 created_at 的updated_at

每当某个产品上发生事件(产品的订单已经到来)时,我需要更新更新的时间,以便记录显示在第一个,因为用户将看到'使用排序的updated_at'行数据。我在这里提到的订阅源将由单个用户使用,并且此处没有关注的概念。因此,无论谁创建了Feed,都会看到自己的Feed。如果订阅源上有更新(由该产品上的某人下订单),它应该会上升。

因此,当下订单时,我会更新条目的更新时间,使其显示在第一个。

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

我尝试了什么?

创建表结构如下

  1. ID
  2. user_id - 创建活动的用户
  3. event - created_product
  4. event_id - product_id of products table
  5. data - 产品详细信息的json对象
  6. created_at
  7. 的updated_at
  8. 收到订单时

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

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

1 个答案:

答案 0 :(得分:1)

好吧,你可以用redis创建有序集:

FEED:USER_ID包含值:

PRODUCT_ID - 上次更新时间为分数

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

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

USER_ID#PRODUCT_ID - 将时间更新为分数

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