我们有一些问题是基于我们在主页中显示 2 列表的位置
- 问题修改日期
- 问题有更大的观点和答案。在这两个列表中,如果问题有相同的观点或答案计数,则排序基于日期。
以前我直接查询 MySQL 数据库并获取值,所以很容易。 但是每个页面请求到达 MySQL 都会有点昂贵,然后开始进行缓存。
我开始使用 Redis。以下是我使用redis缓存的情况
问题是在第二个列表中,我必须通过投票显示问题而不是结合回答问题。 我如何将这种类型的数据存储在 Redis 中,以便通过基于 2 个条件投票和时间的排序来更快地加载?
最佳答案
您可以在 Redis 中使用排序集。您的观看次数或回答次数可以作为分数。根据时间戳创建 key 。排序集方法 zrevrangebyscore 将为您提供正确的顺序。
您可以将您的排序集成员设置为:
'YEAR_MONTH_DATE_HOUR_MINUTE_SECONDS:question_id'
这样排序的话,得分相同的题目,会按照字典顺序返回。如果你使用 zrevrangebyscore,那么后面出现的问题会被放在更高的位置。
您可以创建一个 HashMap 来映射时间戳和问题 ID。更快的查找
我问了一个类似的问题,我也在这里提出了一个解决方案。我想要一些不同的东西,但它会做你想要的。
Redis zrevrangebyscore, sorting other than lexicographical order
关于Redis 选择数据类型的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12854149/