mysql - 当其中一个发生变化时,我应该每次都用 redis 更新缓存吗

标签 mysql redis

让我们看看下面的场景:
一个网站有10000个播放器,为了让问题更简单,我使用mysql存储播放器,只有一个表:“player_table”
------这里是表格------
名称字符串
分数整数

现在,我想通过 socre 显示这些玩家中的前 100 名。
如果只用mysql,每次都要计算Top 100,所以我选择Redis存储Top 100,数据类型为sorted set。

但是如果其中一个玩家的分数改变了,我该怎么办,每次都更新前100名??

谢谢你的进步

最佳答案

首先在你的数据库中引入一个id字段,以name作为主键似乎不太对(如果是玩家唯一的用户名就可以)。

1.保留所有玩家的排序集合,他们的游戏得分作为排序集合中的得分字段。

  1. 每当游戏结束时,更新您的 mysql 表,并对玩家的 redis 排序集执行 ZINCRBY 操作。

  2. 每当您需要排行榜时,请执行 ZREVRANGE操作以根据得分对顶级玩家进行排序。

关于mysql - 当其中一个发生变化时,我应该每次都用 redis 更新缓存吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36529683/

相关文章:

php - MySQL 通过日期时间健全性检查将行插入数据库

php - 选择下拉值检查并显示数据库中是否不存在

php - 将 MySQL DB 导出到 Excel(连接问题)

java - Hibernate 和 MySQL : @CreationTimestamp annotated Date property throws ConstraintViolationException when saving new Entity

caching - Redis线程和访问问题

python - 在 GET 和 POST 之间传输随机生成的数据库 key

php - 为什么我只得到 1 行 ans?

java - 未找到 Redis HashOperations 依赖项?

redis - 这个 Redis 排序集中的顶级电影是什么?

node.js - 在 node.js 中构建图像服务的最佳方式