mysql - redis中如何处理 "View count"

标签 mysql redis ram horizontal-scaling

我们的数据库主要是阅读量,但我们想为我们的视频添加“观看次数”和“赞/不赞”。

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

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

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

谢谢,

萨米

最佳答案

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

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

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

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

关于mysql - redis中如何处理 "View count",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160987/

相关文章:

c - 这个变量存储在c的内存中的什么位置?

c++ - MySQL C++ 连接器失败且没有错误消息

php - 将表 ID 存储在另一个表中以便稍后提取数据

php from 向 mysql 数据库表插入一行

ruby - 在 Redis 中将数组设置为哈希值

python - 如何在 Python 中获取当前的 CPU 和 RAM 使用情况?

mysql - 具有动态 View 的存储过程不会刷新字段数

python - 如何在网页中显示 Redis 排序集元素

data-structures - Redis Hyperloglog - PFCOUNT 副作用

c# - 我如何清除 IEnumerable<ImapX.Messages>?