我们的数据库主要是读取,但我们想在我们的视频中添加“观看次数”和“点赞/点赞”。
当我们在 mysql 中对增量视图进行压力测试时,我们的数据库开始死锁。
我正在考虑通过拥有一个保存视图计数的 redis 数据库来处理这个问题,并且只有在密钥过期后才写入数据库。但是,我听说通知不一致,我不想丢失视图数据。
有没有更好的方法来解决这个问题?或者redis通知不一致的说法不是真的。
谢谢,
萨米
我们的数据库主要是读取,但我们想在我们的视频中添加“观看次数”和“点赞/点赞”。
当我们在 mysql 中对增量视图进行压力测试时,我们的数据库开始死锁。
我正在考虑通过拥有一个保存视图计数的 redis 数据库来处理这个问题,并且只有在密钥过期后才写入数据库。但是,我听说通知不一致,我不想丢失视图数据。
有没有更好的方法来解决这个问题?或者redis通知不一致的说法不是真的。
谢谢,
萨米
Redis 的键空间通知是一致的,但不能保证交付。
如果您不想丢失数据,请实现您自己的后台进程,手动使计数器过期 - 即复制到 MySQL 并从 Redis 中删除。
有几种方法可以实现这种惰性驱逐模式。例如,您可以使用具有两个字段的 Redis 哈希:您可以使用的值字段HINCRBY
和用于到期逻辑目的的时间戳字段。然后,您的后台进程可以SCAN
通过密钥空间来识别过时的密钥。
另一种方法是使用排序集来管理计数器。在某些情况下,您可以只使用一个排序集,将 TTL 和计数编码到每个成员的分数中(分别使用浮点数的整数和小数部分),但在大多数情况下,使用两个排序集更简单——一个用于 TTL,一个用于其他毛皮值。