如何在redis中处理“查看计数”

时间:2017-04-01 19:17:34

标签: mysql redis ram horizontal-scaling

我们的数据库主要是读取,但我们想在视频中添加“查看次数”和“竖起大拇指”。

当我们在mysql中压力测试递增视图时,我们的数据库开始死锁。

我正在考虑通过拥有保存视图计数的redis数据库来处理此问题,并且只有在密钥到期时才写入数据库。但是,我听到通知不一致,我不想丢失视图数据。

有没有更好的方法来解决这个问题?或者说redis通知的说法是不一致的。

谢谢,

森美

1 个答案:

答案 0 :(得分:0)

的Redis'密钥空间通知是一致的,但不保证交付。

如果您不想丢失数据,请实施您自己的后台进程,手动使计数器到期 - 即复制到MySQL并从Redis中删除。

有几种方法可以实现这种懒惰的驱逐模式。例如,您可以使用带有两个字段的Redis Hash:可以HINCRBY的值字段和用于到期逻辑目的的时间戳字段。然后,您的后台进程可以SCAN键空间来识别过时的密钥。

另一种方法是使用排序集来管理计数器。在某些情况下,您只能使用一个排序集,将TTL编码并计入每个成员的分数(分别使用浮点数的整数和小数部分),但在大多数情况下,使用两个更简单排序集 - 一个用于TTL和其他毛发值。