1

我们的数据库主要是读取,但我们想在我们的视频中添加“观看次数”和“点赞/点赞”。

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

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

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

谢谢,

萨米

4

1 回答 1

2

Redis 的键空间通知是一致的,但不能保证交付。

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

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

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

于 2017-04-01T20:14:09.263 回答