我有以下表格结构,用于存储用户的活动,例如'产品创建'
ID 用户身份 TYPE_ID 类型 动词 数据 created_at 的updated_at
每当某个产品上发生事件(产品的订单已经到来)时,我需要更新更新的时间,以便记录显示在第一个,因为用户将看到'使用排序的updated_at'行数据。我在这里提到的订阅源将由单个用户使用,并且此处没有关注的概念。因此,无论谁创建了Feed,都会看到自己的Feed。如果订阅源上有更新(由该产品上的某人下订单),它应该会上升。
因此,当下订单时,我会更新条目的更新时间,使其显示在第一个。
我打算使用redis进行读取,但我对更新部分非常困惑。我将如何处理这种情况。
我尝试了什么?
updated_at
时间戳已更新。这样记录就会出现在用户Feed的顶部。
但这似乎不是一个合适的解决方案,因为频繁的更新可能会导致行锁定和更多等待。我该如何解决这个问题?
答案 0 :(得分:1)
好吧,你可以用redis创建有序集:
FEED:USER_ID包含值:
PRODUCT_ID - 上次更新时间为分数
然后通过你从redis获得的ID获取数据库中的产品。
但如果你主要担心的是行锁定,那么也许你应该排队更新?创建redis排序集“PRODUCT_UPDATED”并在更新产品时添加行:
USER_ID#PRODUCT_ID - 将时间更新为分数
然后创建一些后台CRON作业,它将更新在该有序集中找到的产品。您可以每秒或每30秒执行一次,您可以限制更新次数等...