【问题标题】:should I update cache with redis every times when one of them changing每次其中一个更改时,我是否应该使用 redis 更新缓存
【发布时间】:2016-04-11 15:57:07
【问题描述】:

让我们看看以下场景:
一个网站有 10000 个播放器,为了让问题更容易,我使用只有一个表的 mysql 存储播放器:“player_table”
------这里有表-----
名称字符串
积分

现在,我想通过 socre 显示这些球员的前 100 名。
如果只用mysql的话,每次都要计算Top 100,所以我选择Redis来存储Top 100的排序集数据类型。

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

感谢您的提前

【问题讨论】:

  • 最简单的事情就是将所有玩家及其分数存储在排序集中。然后更新分数并获得前100名是微不足道的。如果你真的只想将前100名存储在Redis中,那么你必须更新数据库中的分数,将其与前100名中的最低分数进行比较,然后可能会更改 Redis 数据集中的玩家。

标签: mysql redis


【解决方案1】:

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

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

  1. 游戏结束后,更新你的mysql表,并为玩家对你的redis排序集进行ZINCRBY操作。

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

【讨论】:

  • 如果我的排行榜需要每个玩家的头像,我是否应该先zrevrange获得前100名,然后使用id和Mysql来获得它的头像??还是有其他办法???
  • @helpme123 是的,那将是一个好方法。这将是一个基于主键的 IN 查询,因此会很高效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多