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